Probleme de tracage sur Usercontrol

Signaler
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Statut
Membre
Dernière intervention
9 juillet 2010
-
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Statut
Membre
Dernière intervention
9 juillet 2010
-
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

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
il faut déssiner ton controle dans OnPaint et uniquement dans OnPaint !

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Statut
Membre
Dernière intervention
9 juillet 2010
3
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));}

}

}
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
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]
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Statut
Membre
Dernière intervention
9 juillet 2010
3
j'ai fai la modif mais ca ne change rien j'ai toujours le meme probleme
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
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]
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Statut
Membre
Dernière intervention
9 juillet 2010
3
ok merci de ton aide je vais regarder et je te tiens au courant

Thx