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

Résolu
cs_fcolo Messages postés 201 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 20 février 2007 - 7 nov. 2006 à 19:15
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

4 réponses

cs_fcolo Messages postés 201 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 20 février 2007 2
8 nov. 2006 à 09:51
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
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 36
7 nov. 2006 à 20:44
il faut dessiner dans l'évènement OnPaint !

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0
cs_fcolo Messages postés 201 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 20 février 2007 2
8 nov. 2006 à 08:36
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
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
8 nov. 2006 à 09:32
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...)
0
Rejoignez-nous