Bild in PictureBox positionieren

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Bild in PictureBox positionieren

    Hallo!

    ich möchte in eine PictureBox durch einen Klick an eine bestimmte Stelle an dieser Stelle ein Bild einfügen. Sprich ich brauche die Koordindaten und einen Auslöser. Ich habs bisher geschafft, dass ich mir die Koordinaten ausgeben lassen kann und ich denke ich habe auch den nötigen Befehl gefunden, der das tut was ich will, aber leider wird mein Bild IMMER an die linke, obere Ecke meiner PictureBox gesetzt.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public buttonselect1 As Boolean = False
    3. Public buttonselect2 As Boolean = False
    4. Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click
    5. End Sub
    6. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    7. If Button1.Enabled Then 'setzt den Button beim Anklicken auf true
    8. buttonselect1 = True
    9. End If
    10. End Sub
    11. Private Sub PictureBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
    12. If buttonselect1 = True Then 'fügt ein Bild ein, wenn Ereignis aktiviert ist
    13. PictureBox1.Image = Image.FromFile("G:\rechteck.png")
    14. buttonselect1 = False
    15. End If
    16. If buttonselect2 = True Then
    17. PictureBox1.Image = Image.FromFile("G:\rechteck_2.png")
    18. buttonselect2 = False
    19. End If
    20. End Sub
    21. Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
    22. End Sub
    23. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    24. If Button2.Enabled Then 'aktiviert den Button beim Anklicken
    25. buttonselect2 = True
    26. End If
    27. If e.Button = Windows.Forms.MouseButtons.Left Then 'gibt Mauszeigerkoordinaten an
    28. mouseX = e.X
    29. mouseY = e.Y
    30. End If
    31. Graphics.FromImage(PictureBox1.Image).DrawImage(PictureBox1.Image, e.X, e.Y) 'laut Hilfe positioniert mir dieser Befehl das Bild an den geklickten x-und y-Koordinaten
    32. End Sub
    33. End Class


    Der Code ist leider nicht vollständig, da ich an einen kleinen Teil gerade nicht rankomme, aber der wäre nur für die Koordinatentransformation zuständig. Darum hab ich der einfachheithalber die Argumente bei dem "Graphics"-Befehl durch e.X und e.Y ersetzt.
    Der Code läuft ohne Fehlermeldung durch, aber sobald ich das Klickereignis in der PictureBox auslöse, wird mein Bill (das Rechteck) immer in die obere linke Ecke platziert, statt an den geklickten Koordinaten.
    Ich hoffe ich konnte mich richtig ausdrücken und habe mein Problem hinreichend geschildert.
    PS: ich bin noch Neuling.

    Danke und Gruß
    Willkommen im Forum. :thumbup:

    Tantal schrieb:

    VB.NET-Quellcode

    1. Graphics.FromImage(PictureBox1.Image).DrawImage(PictureBox1.Image, e.X, e.Y)
    ist Ranz.
    Gemalt wird im Paint-Event der PictureBox. Das sieht dann so aus:

    VB.NET-Quellcode

    1. Private Sub PictureBox1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
    2. Dim g As Graphics = e.Graphics
    3. ' mit g was tun
    4. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Erstmal danke, aber deine Antwort hilft mir jetzt leider nicht weiter, eher im Gegenteil. Ich bin mit deinem Code wieder in einem anderen Sub drin, aber ich brauche das Ereignis ja bei einem Klick in die PictureBox, oder? :)

    ' mit dem g was tun


    ja damit wollte ich ja mein Bild an meine gewünschte Position schieben. Mit

    VB.NET-Quellcode

    1. Graphics.FromImage(PictureBox1.Image).DrawImage(PictureBox1.Image, e.X, e.Y)


    gehts ja anscheinend nicht. Hast du dafür dann eine Alternative?

    Gruß

    Tantal schrieb:

    Hast du dafür dann eine Alternative?
    Klar:
    Beim Klick in der Klasse die Koordinaten merken und dann per PictureBox1.Update() das Malen initiieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So soll es sein. :thumbsup:
    Such mal (Forum und Google) nach Paint-Event und ähnliche Schreibweisen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!