Scintillement, event Paint

Résolu
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 - 30 sept. 2010 à 15:02
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre 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!!!!!!!!!

5 réponses

yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 8
2 oct. 2010 à 05:58
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
3
yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 8
2 oct. 2010 à 14:46
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
3
yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 8
2 oct. 2010 à 05:59
s/font/Form/
:/

remarque 6 heures faudrait penser a se coucher
0
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 2
2 oct. 2010 à 14:42
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!!!!!!!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_thebigboss Messages postés 216 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 12 avril 2017 2
3 oct. 2010 à 14:53
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!!!!!!!!!
0
Rejoignez-nous