Comment parvenir à un BackColor transparent sur un contrôle WinForms original?
-
30-09-2019 - |
Question
Je vais perdre mon esprit ici.
Pourquoi pas le mélange de contrôle de la case avec ce qui est derrière?
La question s'applique à tous les contrôles WinForms, mais je l'utilise comme un exemple.
Une image vaut mille mots:
Et quelques mots:
Ce qui se cache derrière le CheckBox
sont colorés PictureBox
es et un Button
.
Le CheckBox
du BackColor
est réglé sur Transparent
. Mais d'une certaine manière, il décide que cela signifie qu'il devrait partager la BackColor
du contenant Form
(est que l'idée de l'illusion de la transparence?).
est-ce pas possible en WinForms? Je pourrais jurer que je l'ai fait auparavant.
Mise à jour:
Je viens d'essayer ceci:
Sur ce formulaire, définissez la CheckBox
de BackColor
à Transparent
, puis modifiez le BackColor
du Form
contenant à une autre couleur, et la CheckBox
correspondra que BackColor
. Qu'est-ce que le .......?
La solution
Bob Powell a écrit un excellente article sur les contrôles transparents. Check it out:
Autres conseils
Ceci est un effet secondaire des contrôles étant fenêtres Windows. Une fenêtre est responsable de lui-même dessin, les méthodes prennent soin de OnPaintBackground et OnPaint que.
Ce modèle de rendu ne supporte pas bien la transparence. Il y a un soutien pour une véritable transparence en utilisant des fenêtres en couches. C'est mis en œuvre par l'adaptateur vidéo, Windows utilise fonction de superposition de matériel. Mais cela ne fonctionne que pour les fenêtres, pas de fenêtres toplevel enfants. Notez les propriétés Form.Opacity et Form.TransparencyKey.
Il est prise en charge partielle pour la transparence par une astuce. Un contrôle peut simuler en demandant la fenêtre parent se dessiner l'intérieur de la première fenêtre de contrôle. Cela produit les pixels d'arrière-plan, il peut alors tirer au-dessus de cela. Définition de la propriété BackColor Color.Transparent permet cette astuce pour les contrôles qui prennent en charge ce. Toutes les classes dérivées ButtonBase font. Mais pas les contrôles qui encapsulent des contrôles natifs de Windows.
« Demander la fenêtre parent » est l'endroit où la faille dans cette astuce devient visible dans votre capture d'écran. Vous voyez les pixels de forme. effets gerbage ne fonctionnent pas, il ne considère jamais une fenêtre intermédiaire dans l'ordre Z, seul le parent. Ceci est réparable mais très laid, il y a un article de KB qui montrent le code.
Aussi est à noter que WPF ne possède pas cette restriction. Les contrôles ne sont pas les fenêtres, ils rendent par eux-mêmes la peinture sur le dessus du parent. Les couches de peinture. La transparence est maintenant trivial, juste ne pas peindre.
Pouvez-vous définir la couleur d'arrière de la case à cocher manuellement à la couleur que vous voulez? (La valeur de la picturebox derrière)
'Transparent' peut signifier quelque chose de différent de ce que vous voulez MS.
, également essayer de changer le zorder des PictureBoxes (mettre au premier plan) et voir si cela change de couleur sous-jacente de la case à cocher.