如何在vb.net中淡入和淡出自定义面板控件

时间:2012-02-07 13:56:11

标签: vb.net custom-controls

我创建了一个自定义Panel Control,如下所示:

Namespace CustomPanelControl
Public Class CustomPanel
    Inherits Panel

    Public Sub New()
        MyBase.New()
    End Sub
    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = &H20
            Return cp
        End Get
    End Property

    Protected Overrides Sub OnPaintBackground(ByVal e As System.Windows.Forms.PaintEventArgs)
        'do nothing here
    End Sub

    Public Overrides Sub Refresh()
        Parent.Invalidate(New Rectangle(Me.Location, Me.Size), True)
    End Sub

    Protected Sub InvalidateEx()
        If Parent Is Nothing Then
            Return
        End If
        Dim rc As New Rectangle(Me.Location, Me.Size)
        Parent.Invalidate(rc, True)
    End Sub
End Class
End Namespace

现在我需要使用它并让它淡入淡出。这是一个面板,包含媒体播放器上的典型播放,停止,FF,REW控制。就像Windows Player或VLC一样,我希望包含控件的面板在鼠标离开时淡出,在鼠标输入时淡入淡出。

我该怎么做? TIA!

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

Winforms没有任何机制。表单具有不透明度,但控件不具有。

你可以尝试作弊,方法是使用DrawToBitmap(...)拍摄控件的快照,然后将位图放在控制区域上的无边框,无焦点形式,然后淡化不透明度值那里。

但是使用WinForms的任何解决方案都会变得有点hacky。这里的标准答案是考虑WPF或重新考虑您的动画要求。