События панели останавливаются после события MouseDown в LineShape

В 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

person BigBobby    schedule 17.06.2015    source источник
comment
Это совершенно нормально, элемент управления, на который вы нажимаете, захватывает мышь. Может быть, вы хотите добавить обработчик события MouseMove LineShape, может быть, вы хотите добавить ShapeContainer1.Capture = False в обработчик события LineShape1_MouseDown. Очень неясно, что было бы лучше, когда вы не объясняете, что пытаетесь сделать.   -  person Hans Passant    schedule 18.06.2015
comment
Спасибо за ваш ответ. В конечном счете, я хочу перетаскивать LineShapes вокруг панели, когда я нажимаю на LineShape и перемещаю мышь по панели.   -  person BigBobby    schedule 18.06.2015
comment
Это делает использование события MouseMove LineShape наиболее очевидным кандидатом. Просто добавьте это.   -  person Hans Passant    schedule 18.06.2015
comment
Разве я не буду получать события MouseMove LineShape только при наведении мыши на LineShape? Мне нужно получать события, когда я перемещаю мышь за пределы LineShape, чтобы затем изменять атрибуты X и Y в зависимости от того, куда была перемещена мышь.   -  person BigBobby    schedule 18.06.2015
comment
Единственная ошибка, которую вы можете сделать, это не попробовать.   -  person Hans Passant    schedule 18.06.2015
comment
Я на самом деле попробовал это перед моим последним комментарием, хотя? в моем ответе это звучало так, как будто я этого не делал. Я отредактировал свой вопрос, чтобы показать добавленное событие, но TextBox показывает, что я получаю события MouseMove только тогда, когда я на самом деле перемещаю мышь по LineShape.   -  person BigBobby    schedule 18.06.2015


Ответы (1)


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

person BigBobby    schedule 18.06.2015