Wie mache ich zwei transparente Layer mit c #?

Es gibt drei aufeinanderfolgende Schichten,
picturebox1(.jpg) -> label1 -> picturebox2(.png transparent) was ich will ist, um die label1 und pictrurebox2 transparent für die picturebox1 zu machen, damit label1 durch die picturebox2 sehen kann, aber es funktioniert nicht ..

 public Form1() { InitializeComponent(); label1.Parent = pictureBox1; label1.BackColor = Color.Transparent; pictureBox2.Parent = pictureBox1; pictureBox2.BackColor = Color.Transparent; picturebox2.BringToFront(); } 

Also bitte hilf mir

   

Wenn Sie eine transparente Transparenz für die Steuerung benötigen, sollten Sie das Zeichnen des Steuerelements überschreiben und das Steuerelement in dieser Reihenfolge zeichnen:

  • Zeichnen Sie alle Steuerelemente in demselben Container, die sich unter Ihrer Kontrolle befinden (basierend auf dem Z-Index), auf einer Bitmap.
  • Zeichnen Sie dann dieses Bitmap auf Grafiken Ihres Steuerelements.
  • Endlich zeichne Inhalt deiner Kontrolle.
  • Auch die BackColor Ihres Color.Transparent sollte Color.Transparent .

Dies ist das Ergebnis der Erstellung von TransparentLabel und TransparentPictureBox Steuerelementen. Im unteren Bild gibt es Label, Bild, Label, Bild und dann Label in der Reihenfolge und wie Sie sehen können Bild Boxen und Etiketten wurde mit transparentem Hintergrund und respektiert den Z-Index gerendert:

Bildbeschreibung hier eingeben

Transparentes Etikett

 class TransparentLabel : Label { public TransparentLabel() { this.BackColor = Color.Transparent; } protected override void OnPaint(PaintEventArgs e) { if (Parent != null && this.BackColor == Color.Transparent) { using (var bmp = new Bitmap(Parent.Width, Parent.Height)) { Parent.Controls.Cast() .Where(c => Parent.Controls.GetChildIndex(c) > Parent.Controls.GetChildIndex(this)) .Where(c => c.Bounds.IntersectsWith(this.Bounds)) .OrderByDescending(c => Parent.Controls.GetChildIndex(c)) .ToList() .ForEach(c => c.DrawToBitmap(bmp, c.Bounds)); e.Graphics.DrawImage(bmp, -Left, -Top); } } base.OnPaint(e); } } 

Transparente PictureBox

 class TransparentPictureBox : PictureBox { public TransparentPictureBox() { this.BackColor = Color.Transparent; } protected override void OnPaint(PaintEventArgs e) { if (Parent != null && this.BackColor==Color.Transparent) { using (var bmp = new Bitmap(Parent.Width, Parent.Height)) { Parent.Controls.Cast() .Where(c => Parent.Controls.GetChildIndex(c) > Parent.Controls.GetChildIndex(this)) .Where(c => c.Bounds.IntersectsWith(this.Bounds)) .OrderByDescending(c => Parent.Controls.GetChildIndex(c)) .ToList() .ForEach(c => c.DrawToBitmap(bmp, c.Bounds)); e.Graphics.DrawImage(bmp, -Left, -Top); } } base.OnPaint(e); } }