在MouseMove / MouseLeave VB.NET上显示/隐藏子控件

时间:2014-10-08 21:23:38

标签: vb.net visual-studio-2013 children mousemove mouseleave

想象一下这些项目具有子控件的列表(例如,带有媒体控件的歌曲列表)。 我想让孩子在父母的MouseMove上展示。

我面临的问题是当鼠标离开父母进入孩子时,会触发隐藏子控件的MouseLeave事件(这是完全可以理解的)。

如何克服这一点?

A bit of a diagram...

我没有这个问题,因为我用图形绘制了它。我不想画孩子,因为他们需要单独的事件处理程序。

所有项目都是在运行时动态添加的。

修改

事实上,我似乎遇到了图形的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 个答案:

没有答案