Scintillement, event Paint [Résolu]

cs_thebigboss 216 Messages postés jeudi 30 janvier 2003Date d'inscription 12 avril 2017 Dernière intervention - 30 sept. 2010 à 15:02 - Dernière réponse : cs_thebigboss 216 Messages postés jeudi 30 janvier 2003Date d'inscription 12 avril 2017 Dernière intervention
- 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
yohan49 382 Messages postés samedi 22 janvier 2005Date d'inscription 13 août 2011 Dernière intervention - 2 oct. 2010 à 05:58
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

Merci yohan49 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de yohan49
Meilleure réponse
yohan49 382 Messages postés samedi 22 janvier 2005Date d'inscription 13 août 2011 Dernière intervention - 2 oct. 2010 à 14:46
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

Merci yohan49 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

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

remarque 6 heures faudrait penser a se coucher
Commenter la réponse de yohan49
cs_thebigboss 216 Messages postés jeudi 30 janvier 2003Date d'inscription 12 avril 2017 Dernière intervention - 2 oct. 2010 à 14:42
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
cs_thebigboss 216 Messages postés jeudi 30 janvier 2003Date d'inscription 12 avril 2017 Dernière intervention - 3 oct. 2010 à 14:53
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.