-
Provoquer event Paint
Re bonjour !
.net actualise mon graphic mais alors vraiment pas quand je le veux, y a-t'il un moyen de provoquer l'event OnPaint()?
j'ai essayé d'utiliser Graphics g = this.createGraphics() et de dessiner dans une autre méthode, mais rien a faire ca dessine rien du tout :cry:
Merci
-
Normalement, en tapant la methode Invalidate() tu declenches
le Redraw de ton application
Apres, en dehors de cette action.. c'est Windows qui te redessine
Genre, parce que tu modifies des valeurs etc...
Evidemment... dans le OnPaint, ne pas faire d'Invalidate() sinon ca fait un
peu la zouille :)
The Monz, Toulouse
-
ba non :cry:, le redraw ne se fait toujours pas au bon moment.
Et pour la methode createGraphics(), pourquoi lorsque je recupere l'objet graphics j'appel une méthode dessus genre drawLine(), il y a rien qui se dessine dans ma form, alors ke y a vraiment que ce draw la pour le moment. :s Il faut indiquer qui est le container ???
-
ca depend ou tu recuperes le CreateGRaphics... car si tu le recuperes dans une méthode autre que le paint, tu as le risque voir la certitude qu'au prochain Paint tout sera "écraser"
En règle général .. tous les Paint doivent etre fait dans le OnPaint()
(bien sur, dans le OnPaint, tu peux appeler des méthodes qui font du draw, mais seulement dans le OnPaint elles doivent etre appeler sous peine de risquer de voir disparaitre les objets déssiner en dehors du Paint...
C'est la règle sous Windows depuis l'origine des temps ;)
The Monz, Toulouse
-
donc ca veut dire, que si je veux juste ajouter un élément à mon graphique 10 minutes plus tard je dois absolument TOUT redessiné???8O
-
Ca depend ce que tu rajoutes dans ton graphique
Si tu rajoutes un élément de type Controls, il suffit de l'ajouter à ton objet Controls de ta form ou de ton Usercontrol
mais si il s'agit d'un élément graphique, oui , il faudra que tu redessines tout
Mais c'est la logique Windows qui veut cela...
En effet, si tu fais un Hide, ou Maximize, ou autre action changeant ta fenetre,
si tu fais passer un programme par "dessus" ta fenetre, le Paint sera levé et donc, il faudra que tu redessines "tout" pour que tout soit vu.. sinon, tu auras ce soucis là...
C'est pas une grosse contrainte non plus...
(evidemment, ca demande à optimiser le dessin surtout quand les elements
à dessiner sont plus que nombreux ;)
The Monz, Toulouse
-
mmm dans mon cas c'est tout de même un bon handicap, vu que je dois générer des graphiques 2D, dont les informations viendraient petit à petit...
'fin merci pour l'explication, je ferai avec :king:
-
cela dit, tu peux aussi , pour finir, procéder par étapes...
En effet, si tu dois générer des graphiques 2D, tu peux tres bien dessiner
dans un objet Graphics "non visible"... sauvegarde son contenu dans une Bitmap ou une image, et à chaque fois , dans le Paint() ne faire que l'affichage de ton image...
Ca te fera gagner en temps d'affichage sauf les fois ou tu devras "recalculer" ton image... mais bon, apres, tout resizing et autre, ne se fera que par un stretch d'image facile à faire en GDI+... donc, ca limitera la complexité du draw
The Monz, Toulouse
-
oui je veux bien croire, mais la qualité du bitmap n'est pas suffisante pour moi. Je dois avoir la possibilité de faire un zoom assez puissant sur le graph sans pertes. Et bitmap ne permet justement pas ca :?
-
rien ne t'empeche d'avoir une bitmap TRES TRES Grande avec un super résolution et de faire du stretch...
Bon evidemment, si c'est pour faire du draw 2D genre vectoriel, tu vas perdre
un petit peu en résolution au bout d'un zoom conséquent ;)
Ok ca marche
The Monz, Toulouse