Wie ein transparentes Backcolor auf einer ursprünglichen WinForms Kontrolle zu erreichen?
-
30-09-2019 - |
Frage
Ich bin über meine Gedanken hier zu verlieren.
Warum wird nicht das Kontrollkästchen Kontrollmischung mit dem, was steckt dahinter?
Die Frage gilt für alle WinForms Kontrollen, aber ich verwende dies als Beispiel.
Ein Bild sagt mehr als tausend Worte:
Und noch ein paar Worte:
Was steckt hinter der CheckBox
sind farbige PictureBox
es und Button
.
Die CheckBox
des BackColor
auf Transparent
gesetzt. Aber irgendwie entscheidet es, dass das Mittel sollte es die BackColor
des enthaltenden Form
teilen (ist, dass seine Vorstellung von der Illusion der Transparenz?).
Ist dies nicht möglich, in WinForms? Ich könnte schwören, ich habe dies vor.
UPDATE:
Ich habe gerade versucht dies:
Bei dieser Form stellen die CheckBox
des BackColor
zu Transparent
, dann die BackColor
des enthaltenden Form
auf eine andere Farbe ändern, und die CheckBox
wird diese BackColor
entsprechen. Was die .......?
Lösung
Bob Powell eine ausgezeichnet Artikel über transparente Kontrollen geschrieben hat. Check it out:
Andere Tipps
Dies ist ein Nebeneffekt der Kontrollen Windows-Fenster zu sein. Ein Fenster verantwortlich ist selbst für die Erstellung, die OnPaintBackground und OnPaint Methoden sorgen dafür.
Dieses Rendering-Modell Transparenz nicht gut unterstützt. Es gibt Unterstützung für echte Transparenz durch überlappenden Fenstern verwendet wird. Die vom Videoadapter implementiert ist, verwendet Windows die Hardware-Overlay-Funktion. Aber das funktioniert nur für Top-Level-Fenster, nicht Kind Fenster. Beachten Sie die Form.Opacity und Form.TransparencyKey Eigenschaften.
Es gibt teilweise Unterstützung für Transparenz durch einen Trick. Eine Steuerung kann fälschen, indem die übergeordnete Fenster fragt sich innerhalb der Steuerfenster zuerst zu zeichnen. Das erzeugt die Hintergrundpixel, kann es dann oben darauf ziehen. Festlegen der Backcolor-Eigenschaft auf Color.Transparent ermöglicht diesen Trick für Steuerelemente, die dies unterstützen. Alle von der Button abgeleiteten Klassen zu tun. Aber nicht Steuerelemente, sind Wrapper für native Windows-Steuerelemente.
„Asking das übergeordnete Fenster“ ist, wo der Fehler in diesem Trick in Ihrem Screenshot sichtbar wird. Sie sehen die Form Pixel. Stapelungseffekte nicht funktionieren, es hält nie Vermittler Fenster in der Z-Ordnung, nur die Eltern. Dies ist fixierbar, aber sehr hässlich, gibt es einen KB-Artikel, der den Code zeigen.
Ebenfalls bemerkenswert ist, dass WPF diese Einschränkung nicht hat. Die Kontrollen sind keine Fenster, sie machen sich allein auf der Oberseite der Mutter Malerei. Schichten von Farbe. Transparenz ist jetzt trivial, einfach nicht malen.
Kann stellen Sie die Hintergrundfarbe der Checkbox manuell auf die Farbe, die Sie wollen? (Der Wert in der picturebox dahinter)
'Transparent' kann von etwas anderes bedeuten, was Sie MS wollen.
Versuchen Sie auch, die ZOrder der Picture Wechsel (nach vorne bringen) und sehen, ob das das Kontrollkästchen der zugrunde liegenden Farbe ändert.