[C#] [Winform] rafraichissement graphique

Résolu
cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 - 26 juil. 2004 à 15:32
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 - 27 juil. 2004 à 00:36
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

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
26 juil. 2004 à 18:15
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 !!!!
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
26 juil. 2004 à 15:43
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 !!!!
0
cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 1
26 juil. 2004 à 15:51
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 -->
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
26 juil. 2004 à 16:09
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 !!!!
0

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

Posez votre question
cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 1
26 juil. 2004 à 17:03
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 -->
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
26 juil. 2004 à 17:22
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 !!!!
0
cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 1
26 juil. 2004 à 18:02
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 -->
0
cs_stailer Messages postés 507 Date d'inscription jeudi 28 mars 2002 Statut Membre Dernière intervention 13 mai 2009 1
26 juil. 2004 à 18:20
Ok ca me rassure.

Merci (encore) pour ton attention.

<-- St@iLeR -->
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
27 juil. 2004 à 00:36
Prenez l'habitude de fermer les threads svp :)

::|The S@ib|::
MVP C#.NET
0
Rejoignez-nous