Draw moveable Rectangle GDI

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Gelöschter Benutzer.

    Draw moveable Rectangle GDI

    Moin Leute!


    Ich habe mit GDI ein Rectangle auf eine Picturebox gemalt welches sich bewegen lässt, soweit so gut.

    Meine Deklaration sehen wie folgt aus:
    Rectangle

    VB.NET-Quellcode

    1. Private myRectangle As New Rectangle(1, 1, 50, 50)



    Paint Event

    VB.NET-Quellcode

    1. Private Sub pb_Source_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles pb_Source.Paint
    2. Dim size2Pen As New Pen(Color.Red, 2)
    3. With e.Graphics
    4. .DrawRectangle(size2Pen, myRectangle)
    5. End With
    6. End Sub



    Move Rectangle

    VB.NET-Quellcode

    1. Private Sub pb_Source_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles pb_Source.MouseDown
    2. If e.Button = Windows.Forms.MouseButtons.Left AndAlso myRectangle.Contains(e.Location) Then
    3. x = myRectangle.X - e.X
    4. y = myRectangle.Y - e.Y
    5. End If
    6. End Sub
    7. Private Sub pb_Source_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles pb_Source.MouseMove
    8. If e.Button = Windows.Forms.MouseButtons.Left AndAlso myRectangle.Contains(e.Location) Then
    9. myRectangle.X = e.X + x
    10. myRectangle.Y = e.Y + y
    11. pb_Source.Refresh()
    12. End If
    13. End Sub



    Nun zu meinem Problem:

    Ich übergebe ja in der Rectangle Deklaration mit den werten 50,50 die Größe des Rechtecks.
    Aber wie ist es möglich die größe per NumericUpDown zu verändern?
    Ich bekomme das ganze nur zum laufen wenn ich die "Move" funktion weglasse.
    hier nochmal ein kleines Bild:
    Bilder
    • bsp.PNG

      5,52 kB, 454×269, 117 mal angesehen
    @Kameo Probier mal dies:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Me.NumericUpDown1.Value = Me.myRectangle.Width
    3. End Sub
    4. Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
    5. Dim sz = CInt(Me.NumericUpDown1.Value)
    6. Me.myRectangle = New Rectangle(myRectangle.Location, New Size(sz, sz))
    7. Me.pb_Source.Refresh()
    8. 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!