VB.NET渐变填充表单上的透明控件背景?

时间:2009-02-04 13:22:22

标签: vb.net winforms

我正在填充一些VB.NET 2005 WinForms表单的背景,其中包含漂亮的渐变填充(通过覆盖OnPaint事件)。这工作正常,但即使我将BackColor设置为Color.Transparent,表单上的各种标签等也显示为纯色背景。设置表单本身的透明度键似乎会影响这一点,但是我无法让标签具有真正透明的BackColor,是否有一种简单的方法可以解决这个问题,还是我在查看自定义控件等?

2 个答案:

答案 0 :(得分:4)

在项目中添加一个新类并粘贴下面显示的代码。建立。将新控件从工具箱顶部拖放到表单上。

Public Class TransparentLabel
    Inherits Label

    Public Sub New()
        Me.SetStyle(ControlStyles.Opaque, True)
        Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, False)
    End Sub

    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = cp.ExStyle Or &H20  ' Turn on WS_EX_TRANSPARENT
            Return cp
        End Get
    End Property
End Class

闪烁可能很明显,无法修复。

答案 1 :(得分:1)

经过一些实验,我发现以下内容适用于渐变填充形式背景并保持标签透明度:

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

    Dim formGraphics As Graphics = e.Graphics
    Dim gradientBrush As New LinearGradientBrush(New Point(0, Height), New Point(0, 0), Me.AppSettings.FormGradiantFrom, Me.AppSettings.FormGradiantTo)

    formGraphics.FillRectangle(gradientBrush, ClientRectangle)

End Sub

在表单加载事件中:

SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or _
               ControlStyles.ResizeRedraw Or ControlStyles.UserPaint, True)