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

  1. Annuler OnPaintBackground pour ne rien faire. Ou tout simplement en appelant base.OnPaintBackground. Même résultat.
Était-ce utile?

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.

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