Probleme de tracage sur Usercontrol

yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 - 17 oct. 2007 à 12:00
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 - 17 oct. 2007 à 17:09
Salut a tous

j'ai créer un user control avec un control qui fera office de barre de progression ou plutot d'indication de taux de remplissage d'un Device.

J'ai déssiné le control implementer les fonctionnalité .... jusque ici tout va bien

bon probleme est que lorsqu'une fenetre s'ouvre ou que mon control se trouve en parti en dehors de l'ecran (lorsque l'on déplace la form) mon control progressBar se redessine mal et des trait apparaisse.

quelqu'un pourrait-il m'expliquer comment remedier a ce probleme

Merci

6 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 oct. 2007 à 12:18
il faut déssiner ton controle dans OnPaint et uniquement dans OnPaint !

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
17 oct. 2007 à 13:38
c'est exactement ce que j'ai fait

voila mon code :

protected

override
void OnPaint(
PaintEventArgs e){

e.Graphics.Clear(

Color.FromArgb(204, 204, 204));

if (e.ClipRectangle.Width > 0 && e.ClipRectangle.Height > 0){

if (
this._future > 0){

using (
Brush brush =
new
SolidBrush(
Color.FromArgb(255, 25, 0))){

e.Graphics.FillRectangle(brush, (

float)e.ClipRectangle.X, (
float)e.ClipRectangle.Y,
this.GetWidth(
this._future, e.ClipRectangle.Width), (
float)e.ClipRectangle.Height);}

}

if (
this._currentPercent > 0){

RectangleF rectangleF =
new
RectangleF((
float)e.ClipRectangle.X, (
float)e.ClipRectangle.Y,
this.GetWidth(
this._current, e.ClipRectangle.Width), (
float)e.ClipRectangle.Height);

using (
LinearGradientBrush gradientBrush =
new System.Drawing.Drawing2D.
LinearGradientBrush(rectangleF,
Color.FromArgb(128, 130, 133),
Color.FromArgb(47, 44, 45),
LinearGradientMode.Vertical)){

e.Graphics.FillRectangle(gradientBrush, rectangleF);

}

}

//Dessin du rectangle

using (
Pen borderDraw =
new
Pen(
Color.Black)){

e.Graphics.DrawRectangle(borderDraw, (

float)e.ClipRectangle.X, (
float)e.ClipRectangle.Y, (
float)(e.ClipRectangle.Width - 1), (
float)(e.ClipRectangle.Height - 1));}

}

}
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 oct. 2007 à 13:46
ton problème, je pense, c'est le
e.Graphics.Clear(Color.FromArgb(204, 204, 204));

Remplace-le par :

e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(204,204,204)), e.ClipRectangle);

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
17 oct. 2007 à 13:57
j'ai fai la modif mais ca ne change rien j'ai toujours le meme probleme
0

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

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 oct. 2007 à 14:16
le code source n'est pas forcément super lisible dans l'état...

vu la taille d'une progressbar, je te conseille de redessiner entièrement ton contrôle à chaque fois plutot que de passer par le ClipRectangle... c'est surement ici que tu as fait une erreur.

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
17 oct. 2007 à 17:09
ok merci de ton aide je vais regarder et je te tiens au courant

Thx
0
Rejoignez-nous