我想創建一個應用程序,用戶可以在透明背景中移動三個標籤。如果一個標籤將位於另一個上面,則應該可見第二個標籤。 爲此目的我創建的自定義控制衍生物,因爲我想自定義標籤有一個透明的背景 - >等我經由的SetStyle()透明背景與多個控件
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
在主形式設置SupportsTransparentBackColors和UserPaint我創建的標籤作爲你可以看到:
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控件已經設置了這些樣式標誌。你試圖做的事通常是不可能的,透明是通過讓控件的Parent來繪製背景來模擬的。工作正常,但當然你不能看到介於兩者之間的控件,你只能看到父母。真正解決這個問題需要避免使用窗口的控件。像Telerik這樣的組件供應商專注於此。 WPF也是如此。 –
謝謝你的回答!我會尋找WPF和Telerik。 – mookey
如果您願意手動繪製容器上的控件內容,可以完成此操作。這是很多代碼。 –