Moin Forum,
Kann 100 Picture Boxen frei verschieben und zeichne gleichzeitig diverse in der Größe zu berechnende Umrandungen.
Gibt es einen Berechnungsfehler soll eine Meldung kommen und das weitere Verschieben verhindern. Alle Berechnungsfunktionen befinden sich im Original in "Private Sub picB_MouseM(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)", wo auch die Unterbrechnung stattfinden muss.
Nun zum Problem: sobald ich die MSGBox aufrufe hängt sich das Programm ohne Fehlermeldung auf. Ebenfalls ist danach der Aufruf der MSGBox in Button1 nicht mehr möglich.
Das Problem liegt in "Private Sub picZeichnung_Paint", ohne funktioniert alles.
Hier ein kurzes (sinnfreies) Beispiel mit dem selben Effekt.
Public Class Form1
Dim DragFlag As Boolean
Dim MemX As Integer, MemY As Integer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For a As Integer = 0 To 3
Dim mypic As New PictureBox
picZeichnung.Controls.Add(mypic)
With mypic
.Name = "pic" & a + 1
.Size = New Size(30, 30)
.SizeMode = PictureBoxSizeMode.StretchImage
.BorderStyle = BorderStyle.FixedSingle
.BackColor = Color.Green
.Top = a * 100
.Left = 100
.Cursor = Cursors.SizeAll
.Visible = True
AddHandler .Click, AddressOf picB_clicked
AddHandler .MouseDown, AddressOf picB_MouseD
AddHandler .MouseMove, AddressOf picB_MouseM
AddHandler .MouseUp, AddressOf picB_MouseU
End With
Next
End Sub
Private Sub picB_clicked(ByVal sender As Object, ByVal e As Object)
Dim mypic As PictureBox = CType(sender, PictureBox)
End Sub
Private Sub picB_MouseD(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs)
Dim mypic As PictureBox = CType(sender, PictureBox)
mypic.BringToFront()
DragFlag = True : MemX = e.X : MemY = e.Y
End Sub
Private Sub picB_MouseM(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs)
Dim mypic As PictureBox = CType(sender, PictureBox)
If Not DragFlag Then Exit Sub
mypic.Left = mypic.Left + (e.X - MemX)
mypic.Top = mypic.Top + (e.Y - MemY)
Dim iHalf As Long = picZeichnung.Width / 2
If mypic.Left > iHalf Then
mypic.BackColor = Color.Red
mypic.left = 100
MsgBox("Fehler")
Exit Sub
Else
mypic.BackColor = Color.Green
End If
End Sub
Private Sub picB_MouseU(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs)
Dim mypic As PictureBox = CType(sender, PictureBox)
DragFlag = False
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
Button1.Click
MsgBox("Hallo")
End Sub
Private Sub picZeichnung_Click(sender As Object, e As EventArgs) Handles _
picZeichnung.Click
End Sub
Private Sub picZeichnung_Paint(sender As Object, e As PaintEventArgs) _
Handles picZeichnung.Paint
For a As Integer = 1 To 3
With picZeichnung.Controls("pic" & a)
Dim iMitteH As Integer = .Left + (.Width / 2)
Dim iMItteV As Integer = .Top + (.Height / 2)
Using p As New Pen(Brushes.Green, 2)
e.Graphics.DrawLine(p, iMitteH - 30, iMItteV, iMitteH + 30, _
iMItteV)
e.Graphics.DrawLine(p, iMitteH, iMItteV - 30, iMitteH, _
iMItteV + 30)
End Using
End With
Next
picZeichnung.Refresh()
End Sub
Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
Me.Width = 500
Me.Height = 400
With picZeichnung
.Width = 400
.Height = 300
.Top = 50
.Left = 50
End With
End Sub
End Class Hoffe jemand kann helfen, ich verstehe es nicht.
Vielen Dank!
Gruß, LesPaul |