J’ai un panneau dans mon formulaire nommé Pan_Paint
et j’ai le code ci-dessous:
Graphics graph = Pan_Paint.CreateGraphics(); graph.FillEllipse(new SolidBrush(Blue), 10, 10, 100, 100);
Lorsque je réduis le formulaire et que je le rétablis, la ligne disparaîtra. Ou quand j’appuie sur Tab Button, la même chose se passera. Que puis-je faire pour résoudre ce problème? Je vous remercie.
C’est basique.
Vous devez soit mettre en cache tous les dessins dans certaines structures de données et les dessiner dans l’événement Paint
. Encore et encore, chaque fois que Windows a besoin de restaurer l’écran.
Vous appelez initialement l’événement Paint en effectuant un Panel.Invalidate()
chaque fois que vous avez ajouté des actions de dessin à vos files d’attente de dessin.
Aucun moyen de contourner cela autre que:
Dessinez-les dans l’ image d’un PictureBox (pas seulement sur le PictureBox!) ..
Voici le code pour bien faire les choses avec un PictureBox et aussi comment le faire mal:
// this will change the Image of a PictureBox, assuming it has one. // These changes are persistent: using (Graphics G = Graphics.FromImage(pictureBox1.Image)) { G.DrawEllipse(Pens.Red, new Rectangle(0, 0, 444, 444)); pictureBox1.Invalidate(); } // This is the wrong, non-persistent way to paint, no matter which control: //The changes go away whenever the Window is invalidated: using (Graphics G = pictureBox2.CreateGraphics() ) { G.DrawEllipse(Pens.Green, new Rectangle(0, 0, 444, 444)); }
Créez plutôt une classe d’actions de dessin et passez en boucle sur une liste d’entre elles dans l’événement Paint!