Transparente UserControls überlagern

Timmes28

Grünschnabel
Hallo Zusammen,
ich hoffe von euch kann mir jemand weiterhelfen.
Ich habe folgendes Problem:
Ich lade ein Bild in eine PictureBox und auf dieser PictureBox erstelle ich die von mir erstellte UserControls. Diese sollen Transparent sein. Auf den UserControl wird wahlweise ein Kreis, Rechteck, Stern oder Pfeil gezeichnet. Die Transparenz der UserControls zur PictureBox habe ich so realisiert :
Folgende Styles werden im Konstruktor des UserControls gesetzt.
Code:
Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
Me.SetStyle(ControlStyles.UserPaint, True)
Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
Me.SetStyle(ControlStyles.ResizeRedraw, True)
Me.BackColor = Color.Transparent
In meiner Windows Form Anwendung weise ich dann die PictuerBox als Parent hinzu, damit die UscerControls zu dieser Transparent sind. (_uscRectangle,... sind die von mir erstellten Usercontrols)
Code:
Me.Controls.Add(_uscRectangle)
Me.Controls.Add(_uscStar)
Me.Controls.Add(_uscArrow)
Me.Controls.Add(_uscCircle)
_uscRectangle.Parent = PictureBox1
_uscCircle.Parent = PictureBox1
_uscStar.Parent = PictureBox1
_uscArrow.Parent = PictureBox1

Bis hierhin funktioniert auch alles prächtig. Da Problem kommt jetzt erst wenn sich die UserControls überlagern, weil die UserControls nicht zueinander transparent sind. Siehe Bild(gelber Kreis wurde in Paint eingefügt zur Markierung der Problemstelle)
bsp1.png

So sollte es aussehen(Die grünen Linien wurden per Hand eingefügt)
bsp2.png

Ich habe es auch schon mit
Code:
Protected Overridable ReadOnly Property CreateParams As CreateParams
versucht. Leider ohne Erfolg.

Die Möglichkeit direkt auf das Bild zu Zeichen fällt weg, da die Symbole änderbar seinen sollen.(Größe, Position, Farbe , Ausrichtung).
Der Sinn des ganzen besteht darin, die Symbole als Overlay extra abzuspeichern und wieder zu laden. Das Bild in der PictuerBox soll dann mit den Symbolen auch extra abgespeichert werden. (Alles auch schon implementiert und es funktioniert auch).

Welche Möglichkeiten haben ich das die UserControls zueinander und auch zu der PicterBox transparent sind?

Programmiersprache VB.net
Framework 4
 
Zuletzt bearbeitet:

Spyke

Premium-User
Ich denke selber zeichnen wäre da schon die richtige Alternative.
Und es hindert dich ja nicht dadran das dennoch die Form, Farbe, Größe etc. geändert werden kann.
Du musst dir ja nur die entsprechenden Bildpunkte merken.
 

Timmes28

Grünschnabel
Erstmal danke für den Tipp.
Bin jetzt einen anderen Weg gegangen.
Ich hab zwischen die PictureBox und den UserControls ein transparentes Panel gelegt. Statt auf das Bild in der PictureBox zeichne ich jetzt auf das transparente Panel.
Wenn der Mauszeiger ein UserControl verlässt, wird das Symbol auf dem UserControl ausgeblendet und auf das Panel gezeichnet. So ist immer nur ein Usercontrol aktiv und es gibt keine Probleme mehr mit der Transparenz, da die UserControls zueinander nicht mehr transparent seien müssen

So sieht es momentan aus:
bild.png
 

Neue Beiträge