我正在programitacally中创建Panel
labels
和pictureboxes
。
我想做什么,只要鼠标悬停 Panel
Panel
背景颜色将设置为 Steelblue 并且每当发生MouseLeave ,背景颜色设置回透明
我的问题是,每当我悬停Panel
的孩子时,例如Label
或Picturebox
,我都会失去背景颜色,因为代码会考虑那是Panel
的 MouseLeave 事件。
因此,我试图做一个函数,每当我悬停 Panel
的孩子时,它会将Panel
背景颜色设置为 SteelBlue 。
现在的问题是,BackColor会闪烁,因为每当我将Label
或Picturebox
悬停时,它都会将其视为Panel
的 MouseLeave 事件
在实际离开 Panel
边界之前,如何使Panel
的BackColor保持不变?
答案 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