想象一下这些项目具有子控件的列表(例如,带有媒体控件的歌曲列表)。 我想让孩子在父母的MouseMove上展示。
我面临的问题是当鼠标离开父母进入孩子时,会触发隐藏子控件的MouseLeave事件(这是完全可以理解的)。
如何克服这一点?
我没有这个问题,因为我用图形绘制了它。我不想画孩子,因为他们需要单独的事件处理程序。
所有项目都是在运行时动态添加的。
事实上,我似乎遇到了图形的MouseLeave事件的问题。 目前,我让父母的MouseMove事件将ForeColor设置为蓝色,MouseLeave事件将颜色设置为白色。在绘画上绘制的纹理(我在绘制字符串时使用父节点的ForeColor)。看来如果我通过图形离开父母(图形的顶部是0),ForeColor仍然是蓝色。
Private Sub ListItem_MouseLeave(sender As Object, e As EventArgs) Handles Me.MouseLeave
Me.ForeColor = Me.Parent.ForeColor
_controls.Hide()
End Sub
Private Sub ListItem_MouseEnter(sender As Object, e As EventArgs) Handles Me.MouseEnter
Me.ForeColor = SystemColors.HotTrack
If _controls Is Nothing Then
Dim p As New Panel
With p
.BackColor = Color.FromArgb(23, 23, 23)
.Width = Me.Height * 1
.Height = Me.Height
.Left = Me.Width - Me.Height
.Top = 0
.ForeColor = Me.Parent.ForeColor
.Anchor = AnchorStyles.Right
End With
Me.Controls.Add(p)
_controls = p
Else
_controls.Show()
End If
End Sub
Private Sub ListItem_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
Dim strLen As SizeF = e.Graphics.MeasureString(SongName, Me.Font)
e.Graphics.DrawString(getTrimmedString(SongName, SongNameMaxWidth), Me.Font, New SolidBrush(Me.ForeColor), New Point(3, (Me.Height / 2) - (strLen.Height / 2)))
End Sub