【问题标题】:Transparent background with multiple controls具有多个控件的透明背景
【发布时间】: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


【解决方案1】:

这可能不是一个好的答案,但可能会奏效。 您可以使用具有透明背景的图像。像 .png 或 .gif 等。 然后你的图像就是你的文字。 您可以在 Photoshop 中轻松完成此操作。 试着玩弄它,但我会自己画这个项目。 但快速解决方法是使用透明图像。

【讨论】:

    【解决方案2】:

    太长了,没看

    要使任何对象透明,请输入:

    如果是表格:

    Me.TransparencyKey = BackColor
    

    恢复正常:

    Me.TransparencyKey = Transparent
    

    【讨论】:

    • 如果你还没有读过这个问题,最好不要对答案胡乱猜测。
    猜你喜欢
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 2011-07-13
    相关资源
    最近更新 更多