2009-02-04 119 views
1

我正在填充一些漂亮的漂亮渐变填充(通过重写OnPaint事件)的一些VB.NET 2005 WinForms窗体的背景。这工作正常,但表单上的各种标签等显示具有坚实的背景,即使我将BackColor设置为Color.Transparent后。设置窗体本身的透明度键似乎会影响到这一点,但我不能让标签具有真正透明的BackColor,有没有简单的方法来解决这个问题,还是我看着自定义控件等?VB.NET渐变填充窗体上的透明控件背景?

回答

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

一些实验后,我发现,对于gradiant填充形式的背景和保持透明度的标签了以下工作:

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) 
+0

我实现了解决方案描述但是我遇到了一个问题:当我拖动我的表单时,它在之前位置捕获的背景被拖动到新位置...... – 2010-09-01 16:56:01