悬停时设置面板背景色

时间:2013-02-12 16:09:54

标签: vb.net vb.net-2010

我正在programitacally中创建Panel labelspictureboxes

我想做什么,只要鼠标悬停 Panel Panel背景颜色将设置为 Steelblue 并且每当发生MouseLeave ,背景颜色设置回透明

我的问题是,每当我悬停Panel孩子时,例如LabelPicturebox,我都会失去背景颜色,因为代码会考虑那是Panel MouseLeave 事件。

因此,我试图做一个函数,每当我悬停 Panel的孩子时,它会将Panel背景颜色设置为 SteelBlue

现在的问题是,BackColor会闪烁,因为每当我将LabelPicturebox悬停时,它都会将其视为Panel MouseLeave 事件

在实际离开 Panel边界之前,如何使Panel的BackColor保持不变?

2 个答案:

答案 0 :(得分:1)

您可以使用MouseMove事件并检查表单上的位置:

Sub Panel1_MouseEnter(sender As Object, e As EventArgs) Handles Panel1.MouseEnter
    Panel1.BackColor = Color.SteelBlue
End Sub

Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
    If Not Panel1.Bounds.Contains(e.Location) Then
        Panel1.BackColor = SystemColors.Control
    End If
End Sub

答案 1 :(得分:1)

我不知道一个非常简单的方法。最好的方法是创建一个继承自Panel控件的新控件。如果你这样做,那么你可以覆盖OnMouseLeave方法,如下所示:

Protected Overrides Sub OnMouseLeave(e As EventArgs)
    If Not Me.ClientRectangle.Contains(Me.PointToClient(Control.MousePosition)) Then
        MyBase.OnMouseLeave(e)
    End If
End Sub