2015-06-17 8 views
0

В 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 
+0

Это абсолютно нормально, элемент управления, который вы нажимаете, захватывает мышь. Возможно, вы хотите добавить обработчик событий MouseMove LineShape, возможно, вы хотите добавить 'ShapeContainer1.Capture = False' в обработчик события LineShape1_MouseDown. Очень неясно, было бы лучше, если вы не объясните, что вы пытаетесь сделать. –

+0

Благодарим вас за ответ. В конечном счете, я ищу, чтобы перетаскивать LineShapes вокруг Panel, когда я нажимаю на LineShape и перемещаю мышь вокруг панели. – BigBobby

+0

Это делает использование события LineShape MouseMove наиболее очевидным кандидатом. Просто добавьте его. –

ответ

0

Благодаря Гансу для объяснения, почему я перестал получать События мыши для моей панели управления. Кажется, я эффективно решил свою проблему, создав RectangleShape в том же ShapeContainer, что и LineShape. RectangleShape был размером с панелью с пользовательским BorderStyle и прозрачным FillStyle. Даже после нажатия на LineShape и удержания, я все равно получаю события MouseMove для RectangleShape.