Label traparente su Picturebox

Se posizioniamo una Label su una Picturebox e impostiamo la proprietà BackColor della Label a System.Drawing.Color.Transparent per renderla traparente notiamo che non diventa trasparente rispetto alla Picturebox.

Il motivo di questo comportamento lo troviamo su MSDN Proprietà Control.BackColor:

La proprietà BackColor non supporta i colori trasparenti a meno che il bit di stile di ControlStyles.SupportsTransparentBackColor non sia impostato su true.

La proprietà BackColor è una proprietà di ambiente. Una proprietà di ambiente è una proprietà di un controllo che, se non impostata, viene recuperata dal controllo padre. Per impostazione predefinita, a un controllo Button sarà associata, ad esempio, la stessa proprietà BackColor del controllo Form padre. Per ulteriori informazioni sulle proprietà di ambiente, vedere i cenni preliminari sulla classe AmbientProperties o sulla classe Control.

La prima condizione è verificata, la seconda però ci indica che la Label sarà traparente rispetto al Parent che in questo caso è la Form, infatti il colore della Label rimane quello impostato per il BackColor della Form.

Per risolvere possiamo però impostare il Picturebox come Parent della Label per esempio usando questo codice nella Load della Form:

 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     Me.Label1.Parent = Me.PictureBox1
     Me.Label1.Top = Me.Label1.Top – Me.PictureBox1.Top
     Me.Label1.Left = Me.Label1.Left – Me.PictureBox1.Left
End Sub