Comment effacer des graphiques sur un contrôle transparent dans des formulaires Windows
-
05-07-2019 - |
Question
Je ne connais donc pas bien le développement de Windows Forms.
J'essaie de créer un "hé, je suis occupé à faire des choses". composant qui tourne juste une forme autour. Je veux que ce contrôle soit transitoire et s'appuie sur tout autre contrôle. La classe hérite directement de Control.
J'ai donc ceci dans le constructeur:
SetStyle(ControlStyles.Opaque, true);
et ceci:
protected override CreateParams CreateParams
{
get
{
CreateParams parms = base.CreateParams;
parms.ExStyle |= 0x20;
return parms;
}
}
Ce qui me procure un contrôle qui s'inspirera d'autres contrôles.
Maintenant, mon problème est le suivant. Je repeins le contrôle quelques fois par seconde pour donner l’apparence d’une animation fluide. Cependant, je ne peux pas comprendre comment effacer ce qui a été dessiné dans le cadre précédent. L'utilisation de e.Graphics.Clear (Color.Transparent)
dans OnPaint
rend le contrôle entier noir.
Existe-t-il un moyen d'effacer le contenu dessiné d'un contrôle?
J'ai remarqué que le redimensionnement du contrôle efface l'arrière-plan.
Ce qui ne fonctionne pas
- Annuler OnPaintBackground pour ne rien faire. Ou tout simplement en appelant base.OnPaintBackground. Même résultat.
La solution
D'accord, j'ai trouvé la solution ici: http://www.bobpowell.net/transcontrols.htm
Les contrôles parents doivent en réalité être invalidés pour conserver l'arrière-plan transparent.
Autres conseils
Il est possible que vous deviez remplacer OnPaintBackground par cet article: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html
Vous devrez peut-être également invalider le contrôle lorsqu'il devra être effacé pour forcer l'appel de OnPaintBackground.