Inhalt einer Picturebox zur Laufzeit ändern

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von joachim.

    Inhalt einer Picturebox zur Laufzeit ändern

    Guten Tag,

    mein Problem ist:

    Ich habe eine Picturebox mit einer Grafik (Koordinatensystem) erstellt.

    Jetzt soll, wenn der Benutzer des Programms eine bestimmte Eingabe gemacht hat (mit Sub Keypress),

    eine Linie ein Text oder Ähnliches in der Picturebox zu der bestehenden Grafik hinzugefügt werden.

    Wie muss ich vorgehen? Hat jemand eine Idee? Habe schon einiges versucht, kriege es aber nicht hin.

    Gruß

    Joachim
    Lieber SystemUnknow,

    so habe ich es gemacht, aber jedesmal, wenn ich die Prozedur zum Zeichnen aus der Prozedur KeyPress aufrufen will, kommt die Meldung, dass für den Parameter e Argumente fehlen, und es geht nicht weiter. Mache ich da einen Fehler beim Aufrufen der Zeichnen Prozedur?

    Gruß

    Joachim
    [...] dass für den Parameter e Argumente fehlen [...]
    Das scheint mir nach folgendem:

    VB.NET-Quellcode

    1. Private Sub AndereSub() 'Eine andere Sub aus der die Sub "Button_Draw_Click" aufgerufen wird
    2. Button_Draw_Click()
    3. End Sub
    4. Private Sub Button_Draw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Draw.Click
    5. 'Code
    6. End Sub


    Du kannst die Übergabeparameter 'sender' und 'e' in diesem Fall weglassen. Wenn du die Parameter brauchst gibst Du einfach beim Aufruf an

    VB.NET-Quellcode

    1. Button_Draw_Click(New Object, New EventArgs)


    Das sollte die Meldung beseitigen.

    Ich verfolge den Thread noch eine Weile und werd mich melden wenn's nicht funktioniert hat.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    joachim schrieb:

    so habe ich es gemacht, aber jedesmal, wenn ich die Prozedur zum Zeichnen aus der Prozedur KeyPress aufrufen will, kommt die Meldung, dass für den Parameter e Argumente fehlen, und es geht nicht weiter. Mache ich da einen Fehler beim Aufrufen der Zeichnen Prozedur?
    Das sieht mir sehr danach aus, dass du das Paint-Event falsch nutzen willst. Versuch ma folgendes.
    Du erzeugst die Daten für das, was gezeichnet werden soll als globale Variablen (z.B. GraphicsPath o.ä). Wenn alles erstellt ist rufst du die Methode Invalidate() zu Neuzeichnen auf. Wenn du eine Picturebox nutzen willst, achte darauf das richtige Paint-Event und Picturebox.Invalidate zu nehmen.
    Du kannst auch außerhalb des Paint ein graphics-Objekt von einem Bitmap besorgen, dass du in die Picturebox lädst.

    Die sauberste Grafik erzeugst du allerdings mit GDI direkt auf der Form.

    Fiel Fergnügen
    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Guten Morgen,

    habe erst jetzt wieder Zeit, auf die Vorschläge zu antworten.

    Niko, habe alles ausprobiert, leider kein Erfolg.

    Noch einmal zur Orientierung: Ich möchte aus einer Keypress Sub eine Paint Sub aufrufen, um dadurch in einer Picture-Box Linien hinzuufügen. Es scheint ein Übergabeproblem zu sein, das ich bis jetzt nicht lösen konnte.

    Was Vatters Antwort angeht, bin ich im Moment bei der Umsetzung überfordert.

    Bitte nochmal um Eure Hilfe.

    Vatter schrieb:

    Du erzeugst die Daten für das, was gezeichnet werden soll als globale Variablen (z.B. GraphicsPath o.ä). Wenn alles erstellt ist rufst du die Methode Invalidate() zu Neuzeichnen auf.
    Mit INVALIDATE() wird das Steuerelement für ungültig erklärt und zum Neuzeichnen aufgefordert. Das Steuerelement ruft dann seinerseits das Paint-Event auf. Das ist auch hier gut erkärt.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Guten Abend,

    jetzt muss ich ich mich doch nochmal melden, denn ich habe das Problem immer noch nicht lösen können.

    Jedes mal, wenn ich aus der Keypress Sub die Paint Sub aufrufen will, damit etwas in die PictureBox gezeichnet wird, bekomme ich die Meldung, dass für e Argumente fehlen. Ich weiß zum einen nicht, was das für Argumente sein könnten, die an die Paint Sub übergeben werden sollen, habe es mit Nothing, New eventargs usw. versucht, leider ohne Erfolg, immer wieder der Hinweis, dass Angaben fehlen. Mir scheint, dass zwischen keypresseventargs und painteventargs bei der Übergabe von der einen in die andere Sub Dinge beachtet werden müssen, die ich nicht kenne, und auch nirgendwo finde.

    Weiß nicht mehr weiter und bitte Euch mal wieder um Hilfe.

    Gruß

    Joachim
    So lieber der_kurt, dann versuche ich es mal:

    Nach der Betätäigung des Schalters Aufgabe 1, soll folgendes passieren:


    Quellcode

    1. Private Sub Aufgabe1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Aufgabe1.Click
    2. Graph1.Visible = True
    3. Eintrag1.Visible = True
    4. Eintrag1.Focus()
    5. End Sub


    Graph1 ist die picturebox auf der mit folgendem Code ein Koordinatensystem erscheint:

    Quellcode

    1. Private Sub Graph1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Graph1.Paint
    2. Dim i As Integer
    3. Dim y As Integer
    4. Dim x As IntegerDim ft As Font = Me.Font
    5. e.Graphics.TranslateTransform(200, 200)
    6. e.Graphics.DrawLine(Pens.Black, -190, 0, 190, 0)
    7. e.Graphics.DrawLine(Pens.Black, 0, 190, 0, -190)
    8. i = 0For x = -160 To 160 Step 40
    9. i = i + 1
    10. e.Graphics.DrawLine(Pens.Black, x, -2, x, 2)e.Graphics.DrawString("x", ft, Brushes.Black, 180, 5)
    11. Select Case iCase 1
    12. e.Graphics.DrawString("-1", ft, Brushes.Black, -45, 5)Case 2
    13. e.Graphics.DrawString("1", ft, Brushes.Black, 35, 5)
    14. End Select
    15. Next
    16. i = 0For y = -160 To 160 Step 40
    17. i = i + 1
    18. e.Graphics.DrawLine(Pens.Black, -2, y, 2, y)e.Graphics.DrawString("y", ft, Brushes.Black, -20, -180)
    19. Select Case iCase 1
    20. e.Graphics.DrawString("1", ft, Brushes.Black, 5, -45)Case 2
    21. e.Graphics.DrawString("-1", ft, Brushes.Black, 5, 35)
    22. End Select
    23. Next


    Jetzt hätte ich gerne, wenn eine Eingabe in die Textbox Eintrag1 gemacht wurde, dass der Code für Graph1 durch den Code

    Quellcode

    1. e.Graphics.DrawLine(Pens.Blue, -80, 163, -80, 157)
    2. e.Graphics.DrawLine(Pens.Blue, -83, 160, -77, 160)e.Graphics.DrawString("(-2|-4)", ft, Brushes.Blue, -120, 160)

    ergänzt wird. Das ist mein bis jetzt ungelöstes Problem.
    Gruß
    Joachim