面板事件在 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

当我将鼠标移到面板上时,文本框 1 显示我正在获取预期的鼠标移动事件。

当我在面板上单击鼠标按钮并按住它时,TextBox1 仍然显示我正在获得预期的鼠标移动事件。

但是,当我在 LineShape 上单击鼠标按钮并按住它时,TextBox1 显示我不再获得预期的 MouseMove 事件。 此外,如果我在面板上释放鼠标按钮,我也不会获得 MouseUp 事件。

有人可以向我解释我做错了什么吗? 我真的需要在单击线条形状后继续获取面板的鼠标事件!

编辑:

我添加了此事件,但文本框显示,当我将鼠标移到 LineShape 上时,我只会获得 MouseMove 事件:

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

感谢 Hans 解释为什么我停止为我的控制面板获取鼠标事件。 似乎我通过在与LineShape相同的ShapeContainer中创建RectangleShape有效地解决了我的问题。 矩形形状的大小与面板相同,具有自定义边框样式和透明填充样式。 即使在单击LineShape并按住它之后,我仍然会获得RectangleShape的MouseMove事件。

相关内容

  • 没有找到相关文章