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:

text alt

Et quelques mots:
Ce qui se cache derrière le CheckBox sont colorés PictureBoxes 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 .......?

Était-ce utile?

La solution

Bob Powell a écrit un excellente article sur les contrôles transparents. Check it out:

http://www.bobpowell.net/transcontrols.htm

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top