Показать / скрыть дочерние элементы управления в 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

0 ответов

Другие вопросы по тегам