Показать / скрыть дочерние элементы управления в MouseMove/MouseLeave VB.NET
Представьте себе список, в котором элементы имеют дочерние элементы управления (скажем, список песен с элементами управления мультимедиа). Я хотел бы, чтобы ребенок показывал на 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