В Visual Studio 2010 я использую события мыши с LineShapes, расположенными внутри панели. Я создал простой пример, демонстрирующий поведение, которое я не могу объяснить и которое тормозит мой проект.
Public Class Form1
Public Moused_Down_On_Line As Boolean = False
Public Moused_Down_On_Panel As Boolean = False
Public Moused_Move_Count As Integer = 0
Private Sub Panel1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove
Moused_Move_Count += 1
TextBox1.Text = Moused_Move_Count.ToString() + " (" + Moused_Down_On_Line.ToString + ", " + Moused_Down_On_Panel.ToString + ")"
End Sub
Private Sub Panel1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown
Moused_Down_On_Panel = True
End Sub
Private Sub LineShape1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles LineShape1.MouseDown
Moused_Down_On_Line = True
End Sub
Private Sub LineShape1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles LineShape1.MouseUp, Panel1.MouseUp
Moused_Down_On_Panel = False
Moused_Down_On_Line = False
End Sub
End Class
Когда я навожу указатель мыши на панель, TextBox1 показывает, что я получаю ожидаемые события MouseMove.
Когда я нажимаю кнопку мыши на панели и удерживаю ее, TextBox1 по-прежнему показывает, что я получаю ожидаемые события MouseMove.
Однако когда я нажимаю кнопку мыши на LineShape и удерживаю ее, TextBox1 показывает, что я больше не получаю ожидаемые события MouseMove. Кроме того, если я отпущу кнопку мыши над панелью, я также не получу событие MouseUp.
Может кто-нибудь объяснить мне, что я делаю неправильно? Мне действительно нужно продолжать получать события мыши для панели после нажатия на LineShape!
Отредактировано:
Я добавил это событие, но TextBox показывает, что я получаю события MouseMove только при наведении указателя мыши на LineShape:
Private Sub LineShape1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles LineShape1.MouseMove
Moused_Move_Count += 1
TextBox1.Text = "LineShape Event" + Moused_Move_Count.ToString() + " (" + Moused_Down_On_Line.ToString + ", " + Moused_Down_On_Panel.ToString + ")"
End Sub
ShapeContainer1.Capture = False
в обработчик события LineShape1_MouseDown. Очень неясно, что было бы лучше, когда вы не объясняете, что пытаетесь сделать. - person Hans Passant   schedule 18.06.2015