【发布时间】:2014-05-06 22:51:25
【问题描述】:
我正在尝试创建一个应用程序,用户可以在其中移动三个具有透明背景的标签。如果一个标签位于另一个标签之上,则第二个标签应该是可见的。 为此,我创建了一个自定义控件派生,因为我希望自定义标签具有透明背景 -> 所以我通过 SetStyle() 设置 SupportsTransparentBackColors 和 UserPaint
Public Class Customlabel
Inherits System.Windows.Forms.Control
Public Sub New()
MyBase.New()
Me.SetStyle(Windows.Forms.ControlStyles.UserPaint, True)
Me.SetStyle(Windows.Forms.ControlStyles.DoubleBuffer, True)
Me.SetStyle(Windows.Forms.ControlStyles.SupportsTransparentBackColor, True)
InitializeComponents()
End Sub
Private Sub InitializeComponents()
Me.Width = 100
Me.Height = 100
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
MyBase.OnPaint(e)
e.Graphics.DrawString("Test", New System.Drawing.Font("Arial", 12), New System.Drawing.SolidBrush(Color.Black), New System.Drawing.Point(0, 0))
End Sub
End Class
如您所见,我在主窗体上创建了标签:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim AB As Customlabel = New Customlabel
AB.Left = 20
AB.Top = 20
AB.Name = "one"
Me.Controls.Add(AB)
Dim AC As Customlabel = New Customlabel
AC.Left = 50
AC.Top = 20
AC.Name = "two"
Me.Controls.Add(AC)
Dim AD As Customlabel = New Customlabel
AD.Left = 70
AD.Top = 20
AD.Name = "three"
Me.Controls.Add(AD)
End Sub
End Class
尽管如此,标签被绘制成没有透明背景的矩形,重叠的 CustomLabel 不可见。如果我将标签的父属性设置为表单,则背景仅相对于表单是透明的。 (不适用于其他 CustomLabels)
有人知道如何解决这个问题吗?
【问题讨论】:
-
您没有更改任何内容,Label 控件已经设置了这些样式标志。您尝试做的事情通常是不可能的,透明度是通过让控件的父级绘制背景来模拟的。工作正常,但当然你看不到介于两者之间的控件,你只能看到父级。真正解决这个问题需要避免使用窗口的控件。像 Telerik 这样的组件供应商专门从事这方面的工作。 WPF 也是如此。
-
感谢您的回答!我会寻找 WPF 和 Telerik。
-
如果您愿意在容器上手动绘制控件的内容,则可以这样做。这样做需要很多代码。
标签: vb.net label controls transparent