使用鼠标位置在面板内获取面板

时间:2015-06-18 01:40:29

标签: vb.net panel mouse-position childcontrol

我一直在寻找这个东西......它应该工作但事实并非如此。必须有一些我无法理解的东西或我遗失的东西。这是一个非常简单的问题,但我似乎无法解决它。

我得到了Panel1和Panel2,如图所示。 enter image description here

我希望在Panel1 MouseLeave事件中鼠标位于Panel2之后捕获。我的代码是这样的:

Private Sub Panel1_MouseLeave(sender As Object, e As EventArgs) Handles Panel1.MouseLeave

    If sender.ClientRectangle.Contains(PointToClient(Control.MousePosition)) Then
        For Each ctrl As Object In sender.controls
            If ctrl.ClientRectangle.Contains(PointToClient(Control.MousePosition)) Then Exit Sub
        Next
        If Not IsNothing(sender.BackgroundImage) Then sender.BackgroundImage = Nothing
    End If

End Sub

Private Sub Panel2_MouseLeave(sender As Object, e As EventArgs) Handles Panel2.MouseLeave

    If Not sender.ClientRectangle.Contains(PointToClient(Control.MousePosition)) Then
        If Not IsNothing(sender.BackgroundImage) Then sender.BackgroundImage = Nothing
    End If

End Sub

我成功进入第一个if,但For Each中的第二个永远不等于真。所以我想也许第二个面板有问题,所以我尝试为Panel2 MouseLeave设置相同的代码,但是它的工作正常。

我真的需要这个代码才能解决我遇到的大控制闪烁问题。

1 个答案:

答案 0 :(得分:0)

感谢Hans Passant的提示。我只需要使用正确的控件调用PointToClient:

User.find('c5ab1bfc-90ac-4b59-b5d3-fd8940aab7b1')