[C#] [Winform] rafraichissement graphique

Résolu
Signaler
Messages postés
507
Date d'inscription
jeudi 28 mars 2002
Statut
Membre
Dernière intervention
13 mai 2009
-
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
-
Salut,

POurriez-vous me dire pourquoi ce code fonctionne sur un clic de bouton ou n'importe quel autre clic :

// définition du titre de la fenêtre
Graphics g = this.pictBarrehaut.CreateGraphics();
g.DrawString("Titre de la fenêtre",new Font("Arial Black",10), new SolidBrush(Color.Black),
new Rectangle(0,0,250,20));

et ne fonctionne absolument pas au chargement de ma winform.... Et en plus l'image est détruite si je redimensionne ma form.

J'ai bien lu qu'il fallait "invalidate" mais ca ne fonctionne pas..

<-- St@iLeR -->

9 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
98
oui j'ai remarquer ça aussi
dans une appli "normale", ce probleme est resolu en s'abonnant à l'event Paint du form
mais dans ton cas je ne sais pas si c'est vraiment une bonne idée de le faire

Cocoricoooooooo !!!!
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
98
au chargement la zone de dessin n'est pas encore affichée, donc le 1er affichage efface ton dessin de la même manière que le redimensionnement
et pour ce qui est de cet effacement : quand tu dessines sur une zone, celle ci ne conserve pas ces données de dessin, donc tu dois redessiner a chaque fois que la zone de dessin est invalidée (autre fenetre passant au dessus, redimenssionnement etc etc)

si tu te sert d'un picturebox comme le nom le laisse penser, tu peux par contre dessiner sur un objet Image ou Bitmap, et l'affecter au picturebox
ainsi a chaque refresh le controle PB redessine l'image qui lui est affectée

Cocoricoooooooo !!!!
Messages postés
507
Date d'inscription
jeudi 28 mars 2002
Statut
Membre
Dernière intervention
13 mai 2009
1
Ok, merci pour ces renseignements... Mais concrètement ?

J'ai bien mis Invalidate() dans l'évènement OnPaint de mon form, mais ca ne fonctionne pas quand même.

Tu aurais un exemple concret ?

<-- St@iLeR -->
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
98
Invalidate provoque l'envoi d'un message Paint au controle en question
donc mettre Invalidate dans la methode OnPaint n'est pas vraiment conseillé, car OnPaint appelle Invalidate qui provoque l'execution de OnPaint qui appelle Invalidate...
une belle boucle infinie en somme

donc tu dois "dessiner" sur tes controles à ce moment là, pas appeler Invalidate

Cocoricoooooooo !!!!
Messages postés
507
Date d'inscription
jeudi 28 mars 2002
Statut
Membre
Dernière intervention
13 mai 2009
1
Yep,

J'ai fait quelque chose qui marche mais je ne suis pas sur que ce soit bon :

j'ai mis un timer sur un interval de 1 et j'ai mis ca dans l'évènement du timer :

private void timerRedessine_Tick(object sender, System.EventArgs e)
{
g.DrawString(
"Titre de la fenêtre",
new Font("Arial Black",10), 
new SolidBrush(Color.Black),
new Rectangle(0,0,250,20));
}


Qu'en penses-tu ?

<-- St@iLeR -->
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
2 août 2014
98
ben là tu redessines ton titre de fenetre même quand ce n'est pas necessaire.

Met plutot ton code de dessin dans la methode associée à l'event Paint

Cocoricoooooooo !!!!
Messages postés
507
Date d'inscription
jeudi 28 mars 2002
Statut
Membre
Dernière intervention
13 mai 2009
1
Alors c'est ce que j'ai fait après ton précédent message,
mais ca ne fonctionnait pas à tous les coups... Si on déplacait la fenêtre en dehors de l'écran ca se redessinait pas bien.

Et au chargement de l'appli c'était pareil, le graphique était correct uniquement après la redimension de la form.

En fait tout ca est dans un UserControl.
Et ces problèmes dont je te parle sont toujours présents lorsque je mets le code précédent dans l'event paint du user control.

Y a un truc que je dois pas faire...

<-- St@iLeR -->
Messages postés
507
Date d'inscription
jeudi 28 mars 2002
Statut
Membre
Dernière intervention
13 mai 2009
1
Ok ca me rassure.

Merci (encore) pour ton attention.

<-- St@iLeR -->
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
23
Prenez l'habitude de fermer les threads svp :)

::|The S@ib|::
MVP C#.NET