透明背景与多个控件

时间:2014-03-27 18:47:18

标签: 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不可见。如果我将标签的父属性设置为窗体,则背景仅相对于窗体是透明的。 (而不是其他CustomLabels)

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

2 个答案:

答案 0 :(得分:0)

这可能不是一个好的答案,但可能有效。 您可以使用透明背景的图像。像.png或.gif等 然后你的形象就是你的文字。 你可以轻松地在photoshop中做到这一点。 试着玩它但我会自己画这个项目。 但快速解决方法是使用透明图像。

答案 1 :(得分:-1)

太长了;没读过

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

如果形式:

Me.TransparencyKey = BackColor

将其恢复正常:

Me.TransparencyKey = Transparent