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