vb.net - 具有多个控件的透明背景

标签 vb.net label controls transparent

我正在尝试创建一个应用程序,用户可以在三个具有透明背景的标签之间移动。如果一个标签位于另一个标签上方,则第二个标签应该可见。 为此,我创建了一个自定义控件派生,因为我希望自定义标签具有透明背景 -> 因此我通过 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 不可见。如果我将标签的父属性设置为表单,则背景仅相对于表单是透明的。 (不适用于其他自定义标签)

有人知道如何解决这个问题吗?

最佳答案

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

关于vb.net - 具有多个控件的透明背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22696525/

相关文章:

javascript - 为什么我的 Highcharts 图形中的 xAxis 标签位置如此奇怪?

javascript - HTML、javascript - 显示标签的输入值

javascript - 如何根据另一个参数的值有条件地禁用 Storybook 中的控件?

swift - 如何只移动一次标签(快速)?

delphi - 德尔福中的旋转控制

C# 我可以将命令提示符控件添加到我的应用程序吗

database - VB.NET 如何从表中加载数据并显示在数据网格中?

vb.net - 使用 VB.NET 替换字符串中的换行符 (LF)

vb.net - 查找字符串中子字符串第一次出现的位置

.net - 删除记录前面的 0