[PB] creation image sur panel altérée lors du passage d'une form au dessus [Résolu]

Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
- - Dernière réponse : cs_fcolo
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
- 8 nov. 2006 à 09:51
Bonjour,

Je crée une image (un graphique) à partir d'un tableau de point [X,Y] sur un controle utilisateur.
bitmap =

new Bitmap(Width, Height);
Graphics graph = Graphics.FromImage(bitmap);
bool
relierPoint =
false;
Point pointPrecedant =
new Point(0,0);

foreach(Point p
in _Historique)
{
if
(relierPoint)
{
graph.DrawLine(myPen2,pointPrecedant,p);
}

pointPrecedant.X = p.X;
pointPrecedant.Y = p.Y;

}
graph.Flush();
graph.Dispose();
this
.BackgroundImage = (Bitmap)bitmap.Clone();

bitmap.Dispose();
L'image est bien mise sur le controle mais lors je passe une fenetre par dessus (par exemple durant le debugage la fenetre de VS), lorsque je reviens sur ma form où est mon controle utilisateur, je vois le texte de VS par dessus les zones non écrites de mon controle.

Savez vous comment je peux rafraichir l'affichage? (j'ai deja testé le .refresh)

Merci

f.colo
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
1
3
Merci
Merci pour cette solution mais j'ai réussi à ce qu'il n'y ait plus de probleme en mettant une colleur de fond à mon Image.

graph.FillRectangle(

new SolidBrush(Color.LightSteelBlue),0,0,Width,Height);

Comme ca, il y a de la couleur sur le fond lors du repaint, le controle sait ce qu'il doit dessiner, plutot que de laisser la persistance des anciennes fenetres au dessus.

Merci encore pour votre aide :)

f.colo

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 222 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_fcolo
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
0
Merci
il faut dessiner dans l'évènement OnPaint !

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Commenter la réponse de sebmafate
Messages postés
201
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
20 février 2007
1
0
Merci
Le probleme est que la création de l'image peut être très longue selon le nombre de point (je calcule les coordonnées de chaque point en fonction de la taille du composant).
Ce qui me gène c'est que lors du OnPaint ca risque de prendre trop de temps à redessiner tout ca.

Je vais faire des essais de toute facon, creer l'image avant, et dans le OnPaint la remettre en backgroundImage.

Merci du conseil :)

Mais si il y a d'autres solution je suis preneur ^^

f.colo
Commenter la réponse de cs_fcolo
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
13
0
Merci
si cest long et que ton composant ne peut pas être resize, pourquoi ne pas plutot calculer ton image au load et la placer en mémoire pour juste la recopier au paint? (a voir car si ton composant peut etre resize dynamiquement il faudra le recalculer au resize, ce qui est pas terrible...dans ce cas, pour eviter de recalculer 20 fois limage au moindre resize, utilise un flag pour dire qu'il faut recalculer limage au onpaint....ainsi ce nest long a recalculer au moment du paint que si ton controle a été resize...)
Commenter la réponse de leprov