2

我正在以编程方式创建一个Panelwith labelsand in it。pictureboxes

我想做的是,每当鼠标悬停时,背景色将设置为 Steelblue,并且每当MouseLeave发生,背景色都会设置回透明PanelPanel

我的问题是,每当我将 a或 a的悬停时,我都会失去背景色,因为代码将其视为.PanelLabelPictureboxPanel

因此,我试图做一个功能,每当我 悬停一个孩子时,Panel它会将背景色设置PanelSteelBlue

现在的问题是,BackColor 闪烁,因为每当我悬停 aLabel或 aPicturebox时,它都认为这是一个MouseLeave事件Panel

在我真正离开边界之前,如何使 BackColorPanel保持不变?Panel

4

2 回答 2

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
于 2013-02-12T16:19:11.143 回答
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
于 2013-02-12T16:20:48.730 回答