panel with border
-
jeudi 8 mars 2012 10:01
Bonjour ,
j'ai un panel1 situé dans un autre panel p .p a un scroll bar . je veux changer la bordure du panel1 en gris alors j'ai ecris ce handler pour panel1:
{e.Graphics.DrawRectangle(Pens.Silver,
e.ClipRectangle.Left,
e.ClipRectangle.Top,
e.ClipRectangle.Width - 1,
e.ClipRectangle.Height - 1);
base.OnPaint(e);}
ça avait l'air de marcher mais quand je monte ou descend le scroll bar de p , le deplacement du rectange que j'ai dessiné reste dans p ce qui me donne une zonne pleine de trait gris .
est ce que quelqu'un peut m'aider ?- Modifié Ciprian DuduialaOwner mardi 13 mars 2012 10:03 titre
Toutes les réponses
-
jeudi 8 mars 2012 10:59
wi je l'ai fais :
panel1.Paint+=new System.Windows.Forms.PaintEventHandler(this.ArgumentGroup_Paint);
mais le probléme est losque je "move the scroll bar " le deplacement du rectangle de bordure reste dessiné ce qui me donne plein de ligne
-
jeudi 8 mars 2012 11:00Auteur de réponse
Bonjour,
Modifier votre code de la façon suivante :
e.Graphics.DrawRectangle(Pens.Blue, panel1.ClientRectangle.Left, panel1.ClientRectangle.Top, panel1.ClientRectangle.Width - 1, panel1.ClientRectangle.Height - 1); base.OnPaint(e);
Bien sur le handler dont vous parlez est celui de l'event Paint de panel1.
L'explication de votre problème est la suivante : Le système ne refait l'opération Paint que pour la zone qui en a besoin (e.ClipRectangle)
qui peut ne pes correspondre à la totalité du panel quand c'est juste un partie de celui ci était caché par une autre fenêtre.
Cordialement.
- Modifié Ould MouradEditor jeudi 8 mars 2012 11:02
- Marqué comme réponse peythonet jeudi 8 mars 2012 11:28
-
jeudi 8 mars 2012 11:28merci ça marche :)
-
mercredi 14 mars 2012 15:54
est ce qu'ilya un moyen de changer la couleur de bordure d'un groupBox ?
-
mercredi 14 mars 2012 16:02Modérateur
Bonjour,
Non, à part programmer le dessin du group box "à la main"
Cordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0
- Modifié Gilles TOURREAUMVP, Moderator mercredi 14 mars 2012 16:03
-
mercredi 14 mars 2012 16:14j'ai essayé d'utiliser la meme fonction de paint mais estétiquement parlant c'est pas top . ya til un autre moyen de le faire?
-
mercredi 14 mars 2012 17:12Modérateur
Bonjour,
Vous pouvez utiliser la classe statique ControlPaint (http://msdn.microsoft.com/en-us/library/feaea5t8.aspx) qui vous permet de dessiner des éléments de Windows dans un objet Graphics. Regardez en particulier les méthodes DrawBorder() qui peut vous aider à dessiner une bordure.
Cordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 -
jeudi 15 mars 2012 08:13
j'ai utilisé ce code :
public class myGroupBox : GroupBox{
private Color borderColor;
public Color BorderColor
{
get { return this.borderColor; }
set { this.borderColor = value; }
}
public myGroupBox()
{
this.borderColor = Color.Black;
}
protected override void OnPaint(PaintEventArgs e)
{
Size tSize = TextRenderer.MeasureText(this.Text, this.Font);
Rectangle borderRect = e.ClipRectangle;
borderRect.Y += tSize.Height / 2;
borderRect.Height -= tSize.Height / 2;
ControlPaint.DrawBorder(e.Graphics, borderRect, this.borderColor, ButtonBorderStyle.Solid);
Rectangle textRect = e.ClipRectangle;
textRect.X += 6;
textRect.Width = tSize.Width;
textRect.Height = tSize.Height;
e.Graphics.FillRectangle(new SolidBrush(this.BackColor), textRect);
e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), textRect);
}
}
mais lorsque je monte ou descend le scroll bar du panel parent ilya redondance des traits du rectangle?
-
jeudi 15 mars 2012 09:41
je l'ai reglé
il suffisait de faire :
GroupBox g=(GroupBox)this;
Rectangle textRect = g.ClientRectangle;
merci bien
- Marqué comme réponse peythonet jeudi 15 mars 2012 09:41

