Scintillement, event Paint [Résolu]

Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Dernière intervention
12 avril 2017
- - Dernière réponse : cs_thebigboss
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Dernière intervention
12 avril 2017
- 3 oct. 2010 à 14:53
Bonjour,

j'étais sur que mon problème était super connu et j'ai cherché sur le forum, mais aucune des solutions proposées ne semblent marcher sur mon programme.

J'ai un panel qui contient une image de fond.
Sur l'event Paint de ce Panel, je dessine un rond :

void Pnl_JeuPaint(object sender, PaintEventArgs e)
{
//gr=e.Graphics;
//gr.FillEllipse(new SolidBrush(p.Color),pX,pY,pSize,pSize);
e.Graphics.FillEllipse(new SolidBrush(p.Color),pX,pY,pSize,pSize);
}


J'ai par ailleurs un Thread qui fait avancer mon rond:
private void ThreadMoveFunction()
{
int temps=10;//time in ms

while(pSpeed>0)
{
pX++;
pY++;

this.pnl_Jeu.Invalidate();
Thread.Sleep(temps);
pSpeed--;
}
}


Mon circle avant bien comme je le souhaite, mais le tout scintille.
En cherchant sur le forum j'ai trouvé des solutions en ajoutant des Style:
SetStyle(			System.Windows.Forms.ControlStyles.AllPaintingInWmPaint |			System.Windows.Forms.ControlStyles.UserPaint |			System.Windows.Forms.ControlStyles.DoubleBuffer, true);

SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

this.SetStyle( ControlStyles.UserPaint | ControlStyles.SupportsTransparentBackColor, true );


Mais cela ne change absolument rien chez moi

J'avais l'impression qu'à chaque avancement de mon cercle, l'image de fond de mon Panel était redessinée, mais je l'ai supprimée et c'est pareil...

Merci d'avance.

Nico

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
382
Date d'inscription
samedi 22 janvier 2005
Dernière intervention
13 août 2011
3
Merci
salut

paint directement ton panel dans un usercontrols

public class myPanel : UserControl
{

        public myPanel()
        {
            #region SetStyle

            SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            SetStyle(ControlStyles.ResizeRedraw, true);
            SetStyle(ControlStyles.Selectable, true);
            SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            SetStyle(ControlStyles.UserPaint, true);

            #endregion
        }

        protected override void OnPaintBackground(PaintEventArgs e)
        {
            //base.OnPaintBackground(e);
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            //base.OnPaint(e);

            e.Graphics.FillEllipse(new SolidBrush(p.Color),pX,pY,pSize,pSize);
        }
}


ajout a cette class les propiété pX, pY,pSize en get , set;
dans ton thread de ta font tu modifie les valeur de ses propriétés
il tu l'invalide
muPael1.Invalidate();

la tu n'aura plus aucun sintillement

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de yohan49
Messages postés
382
Date d'inscription
samedi 22 janvier 2005
Dernière intervention
13 août 2011
3
Merci
le soucis c que le panel est paint plusieur fois

1 fois sur le paintbackground
1 fois sur le paint

et une 3 eme fois sur ton event

hors avec ma methode

tu peux peindre tout en un seul appel

OnPaint

la tu peint ton background et ce que tu veux

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de yohan49
Messages postés
382
Date d'inscription
samedi 22 janvier 2005
Dernière intervention
13 août 2011
0
Merci
s/font/Form/
:/

remarque 6 heures faudrait penser a se coucher
Commenter la réponse de yohan49
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Dernière intervention
12 avril 2017
0
Merci
Merci beaucoup pour ta réponse!!!

Je vais l'essayé tout de suite, par contre ce qui me semble surprenant c'est que pour ne pas avoir de scintillement lorsqu'on affiche un dessin dans un simple panel, il faille se créer un usercontrol???



A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Commenter la réponse de cs_thebigboss
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Dernière intervention
12 avril 2017
0
Merci
Ta seconde réponse m'a fait me poser une bonne question "Est-ce que le problème serait identique avec un pictureBox?" et la réponse semble être non. Du coup j'ai préféré remplacer mon panel par un simple picturebox. Cela me semble plus simple que de ce créer un usercontrol et de lui passer en propriété tout ce qu'il doit afficher.

Merci pour ton aide!!!



A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Commenter la réponse de cs_thebigboss

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.