В Visual Studio 2010 я использую события мыши с LineShapes, расположенными внутри панели. Я создал простой пример, демонстрирующий поведение, которое я не могу объяснить и поддерживаю мой проект.Панели События Остановка после события MouseDown на LineShape
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.
Может кто-нибудь объяснить мне, что я делаю неправильно? Мне действительно нужно продолжать получать события Mouse для Panel, после нажатия на 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
Это абсолютно нормально, элемент управления, который вы нажимаете, захватывает мышь. Возможно, вы хотите добавить обработчик событий MouseMove LineShape, возможно, вы хотите добавить 'ShapeContainer1.Capture = False' в обработчик события LineShape1_MouseDown. Очень неясно, было бы лучше, если вы не объясните, что вы пытаетесь сделать. –
Благодарим вас за ответ. В конечном счете, я ищу, чтобы перетаскивать LineShapes вокруг Panel, когда я нажимаю на LineShape и перемещаю мышь вокруг панели. – BigBobby
Это делает использование события LineShape MouseMove наиболее очевидным кандидатом. Просто добавьте его. –