Rubellos

  • VB.NET

Es gibt 69 Antworten in diesem Thema. Der letzte Beitrag () ist von Torty H.

    EiPott schrieb:

    ReDim Preserve
    Uralt. Unperformant. List ist viel schneller.
    Ich weiß, Array-Vergrößerungen sind ziemlich grauenhaft.
    Aber Graphics.DrawLines akzeptiert nunmal nur ein Array, und keine List. Also müsste ich die List in ein Array umwandeln, und das wäre noch unperformanter als, das Array gleich zu redimensionieren.

    Dim rct = New Rectangle
    Keine Typzuweisung.
    Und das sollte eine "Verbesserung" meines Codes sein?
    Ich programmiere mit Option Infer. Bei Option Infer erkennt der Compiler selbst den Datentypen.
    Also

    VB.NET-Quellcode

    1. Dim rct = New Rectangle(e.Location - New Size(4, 4), New Size(8, 8))
    2. ' ist absolut gleichbedeutend mit
    3. Dim rct2 As New Rectangle(e.Location - New Size(4, 4), New Size(8, 8))


    Hingegen empfehle ich dringend, sich Option Strict On! anzugewöhnen.


    Torty H schrieb:

    Könnte man stat einer Farbe auch ein bild nehmen das man dann wegradieren kann ??
    Ja. Tus als Hintergrundbild der Picbox rein - der TextureBrush malt dann die Auflösung da drüber.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @Erfinder

    da deine Version bei mir irgendwie net geht hab ich die von Eipott genommen....Da kann ich aber kein bild reinmachen das freigerubbelt wird....

    Könntest du BITTE deine vll auf vb 08 umschreiben. Wäre sehr nett^^
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    ich benutze es folgendermasen

    Man hatt ein Bild zb ne schildkröte

    Klicke auf einen Knopf erscheiun ein Bild mit der schilkröte und ganz viel schaum nun kann man den schaum wegwischen "abwischen"

    so nun is meine kröte wieder suber ^^
    @ Torty: nette idee^^

    @Erfinder: THX nochmal ;D
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    ein Problem habe ich noch und zwar

    wen ich das bild wegradiert habe kann ich ja net nochmal radieren dafür müsste ich ja das programm neu starten ??

    wie kann ich das machen das ich wenn ich ein button drücke automatisch die wegrubbelschicht wieder da ist
    OMG natürlich musst du nicht das Programm neustarten!!

    Alter du musst den Code verstehen


    Dann kannst du Schildkröte so oft einschäumen wie du möchtest!
    Ich kann dir nur sagen, wenn man den Code versteht, ist es echt erstaunlich was mann damit machen kann
    (Ich meine Programmieren Allgemein!).

    Wenn man keine Ahnung hat was der Code wie überhaupt anstellt, ist man wohl doch leicht eingeengt und hat keine freie Hand.

    Wenn man nur alles ausm Forum kopiert wird dein Programm eh richtig schei**, weil es dann nur ein paar Funktionen sind die irgendwie mit Events von Controls unsinnig aneinander-gereiht sind / geknüpft werden.

    Wenn du dich mit Google oder einem Buch befreundet hättest, wüstest du jetzt was der Code macht und deine Frage des neustartens wäre garnicht aufgekommen!

    Und falls du es per Google und Co. nicht herrausgefunden hättest was der Code wie macht Frage doch bitte hier im Forum nach, wir helfen (vorerst alle anderen ^^) gerne. Solche fragen wie "... neustarten?" sind echt unnötig.

    Ich hafte nicht für Rechtschreib sowie für Grammatik fehler. :D
    (Es ist dunkel hab die Stromrechnung noch nicht bezahlt xD)

    Edit: Ok die Anrede mit Alter hätte nicht sein gemusst, aber lass ich jetzt mal so stehen :thumbsup:
    oO Oo da siht man mal wie andere leute sein können ^^

    aber hast ja recht

    okay

    Würde mir freundlicherweiße einer den Code erklären
    ??

    damit ich eventuell ihn verstehen kann ??!!

    VB.NET-Quellcode

    1. Dim lines(-1) As Point
    2. Dim pen As New Pen(New TextureBrush(My.Resources.kroete_Grundstellung), 50) _
    3. With {.StartCap = Drawing2D.LineCap.Round, .EndCap = Drawing2D.LineCap.Round}
    4. Private Sub PictureBox2_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PictureBox2.MouseMove
    5. If e.Button <> Windows.Forms.MouseButtons.Left Then Return
    6. ReDim Preserve lines(lines.Count)
    7. lines(lines.Count - 1) = e.Location
    8. Dim rct As New Rectangle(e.Location - New Size(15, 15), New Size(17, 17))
    9. PictureBox2.Invalidate(rct) 'nur dieses rectangle neuzeichnen
    10. End Sub
    11. Private Sub PictureBox2_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles PictureBox2.Paint
    12. If lines.Length < 2 Then Return
    13. e.Graphics.DrawLines(pen, lines.ToArray)
    14. End Sub
    ^^ hatt sich gelont das ganze ma richtig anzuschauen und einzelne befehle zu lernen

    ^^
    hab das ganze eine mit

    VB.NET-Quellcode

    1. PictureBox1.Refresh()' Edit und natürlich den Arry zurücksetzten'
    2. ReDim lines(-1)
    neu geladen ^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Torty H“ ()

    Torty H schrieb:

    wie kann ich das machen das ich wenn ich ein button drücke automatisch die wegrubbelschicht wieder da ist

    Du mußt natürlich das lines-Array zurücksetzen.

    Jetzt habich gemerkt, dass beim Downgrade auf VB2008 die Ressourcen verhunzt sind. Also neuer Anhang

    Edit: ach, du bist ja selbst drauf gekommen. Nur .Invalidate() ist bisserl günstiger als .Refresh(), weils weniger in die Zeichenlogik von GDI eingreift.
    Dateien
    • rubbel03.zip

      (27,88 kB, 76 mal heruntergeladen, zuletzt: )
    Leicht Offtopic
    Spoiler anzeigen
    Was heißt "da siht man mal wie andere leute sein können" ich bin bestimmt nicht der einzigste der sich das gedacht hat und ich habe es ja auch nicht böse gemeint.

    Ich häte dir auch geholfen (wenn ich das Thema ehr endeckt hätte und die Lösung nicht schon auf dem Tisch läge).
    Sei es denn zum späteren Zeitpunkt mit einem Beispiel Code oder Projekt.

    Nur wenn man sich die mühe macht, wäre es schon toll wenn die Leute den Code nicht nur Kopieren und Einfügen, sondern auch verstehen wollen wie alles funktioniert.
    Denn sonst dauert es zwischen 1 Tag und 8 Wochen (je nach Aktivität des Users) bis wieder eine Frage zum gleichen Thema kommt obwohl derjenige es eig. wissen müsste.

    Es liegt doch auch nur im Vorteil des User's wenn er auf dauer Programmieren möchte.
    Wenn man nur C&P betriebt (ich meine jetzt nicht dich) dauert alles viel länger und man ist unflexibel und gebunden.

    Ohne Lernen mit C&P:
    - Forum Fragen => nach 2 Stunden Antwort => 6 Stunden hin und her => Lösung
    - Forum Fragen => nach 2 Stunden Antwort => 6 Stunden hin und her => Lösung
    - Forum Fragen => nach 2 Stunden Antwort => 6 Stunden hin und her => Lösung
    - Forum Fragen => nach 2 Stunden Antwort => 6 Stunden hin und her => Lösung
    - ...

    Mit Lernen und C&P:
    - Forum Fragen => nach 2 Stunden Antwort => 6 Stunden hin und her => Lösung
    - überlegen => Vielleicht Beispiel nochmal anschauen falls vergessen => Lösung
    - Lösung
    - Lösung
    - Lösung
    - ...


    Verwende lieber Invalidate anstatt Refresh

    Edit: Zu spät xD
    Der ErfinderDesRades mit den vielleicht schnellsten Findern der Welt :D

    Eistee schrieb:

    Was heißt "da siht man mal wie andere leute sein können" ich bin bestimmt nicht der einzigste der sich das gedacht hat und ich habe es ja auch nicht böse gemeint.

    hab doch da nen ^^ hingemacht

    ich wolte damit sagen das ich einfach nur auf dem schlauch stand und hatte ja mit gdi noch nie was zu tun

    also normalerweise versuche ich alles zu verstehen was ich auch mache nur manchmal hab ich einfach keine zelle mehr übrig um da durch zu blicken dann dauert es eben meist länger (als 6 stunden ^^)

    nu is aber wieder gut

    Ich bedanke mich bei allen ^^