2008-09-16 8 views
12

En C# .NET j'essaye de changer par programme la couleur de la frontière dans une zone de groupe. Mise à jour: Cette question a été posée lorsque je travaillais sur un système WinForms avant de passer à .NET.Comment changer la couleur de la bordure d'une boîte de groupe?

+0

@Amy Vérifiez _user1944617_ réponse, c'est vraiment sympa et supérieur à celui accepté. juste essayé et correspond parfaitement avec la conception de boîte de groupe par défaut. – Drake

Répondre

14

bâtiment sur la réponse précédente, une meilleure solution qui comprend l'étiquette de la boîte de groupe:

groupBox1.Paint += PaintBorderlessGroupBox; 

private void PaintBorderlessGroupBox(object sender, PaintEventArgs p) 
{ 
    GroupBox box = (GroupBox)sender; 
    p.Graphics.Clear(SystemColors.Control); 
    p.Graphics.DrawString(box.Text, box.Font, Brushes.Black, 0, 0); 
} 

Vous pouvez régler le x/y pour le texte, mais pour mon usage c'est juste .

+0

Merci @Mick Bruno, vous m'a sauvé un moment sérieux :) –

+1

Thx! Pour supprimer la bordure, utilisez 'box.Parent.BackColor', comme je l'ai fait. – dwo

1

Je ne suis pas sûr que cela vaut pour tous les cas, mais grâce à ce fil, nous accroché rapidement dans l'événement Paint par programme:

GroupBox box = new GroupBox(); 
[...] 
box.Paint += delegate(object o, PaintEventArgs p) 
{ 
    p.Graphics.Clear(someColorHere); 
}; 

Cheers!

5

Il suffit de définir l'action de peinture sur n'importe quel objet (et pas seulement sur les boutons) de cette méthode pour dessiner une bordure. Il ne sera toujours pas joli et arrondi comme l'original, mais c'est beaucoup plus simple.

24

Ajoutez simplement un événement de peinture.

private void groupBox1_Paint(object sender, PaintEventArgs e) 
    { 
     GroupBox box = sender as GroupBox; 
     DrawGroupBox(box, e.Graphics, Color.Red, Color.Blue); 
    } 


    private void DrawGroupBox(GroupBox box, Graphics g, Color textColor, Color borderColor) 
    { 
     if (box != null) 
     { 
      Brush textBrush = new SolidBrush(textColor); 
      Brush borderBrush = new SolidBrush(borderColor); 
      Pen borderPen = new Pen(borderBrush); 
      SizeF strSize = g.MeasureString(box.Text, box.Font); 
      Rectangle rect = new Rectangle(box.ClientRectangle.X, 
              box.ClientRectangle.Y + (int)(strSize.Height/2), 
              box.ClientRectangle.Width - 1, 
              box.ClientRectangle.Height - (int)(strSize.Height/2) - 1); 

      // Clear text and border 
      g.Clear(this.BackColor); 

      // Draw text 
      g.DrawString(box.Text, box.Font, textBrush, box.Padding.Left, 0); 

      // Drawing Border 
      //Left 
      g.DrawLine(borderPen, rect.Location, new Point(rect.X, rect.Y + rect.Height)); 
      //Right 
      g.DrawLine(borderPen, new Point(rect.X + rect.Width, rect.Y), new Point(rect.X + rect.Width, rect.Y + rect.Height)); 
      //Bottom 
      g.DrawLine(borderPen, new Point(rect.X, rect.Y + rect.Height), new Point(rect.X + rect.Width, rect.Y + rect.Height)); 
      //Top1 
      g.DrawLine(borderPen, new Point(rect.X, rect.Y), new Point(rect.X + box.Padding.Left, rect.Y)); 
      //Top2 
      g.DrawLine(borderPen, new Point(rect.X + box.Padding.Left + (int)(strSize.Width), rect.Y), new Point(rect.X + rect.Width, rect.Y)); 
     } 
    } 
+0

Existe-t-il un moyen d'épaissir la bordure et d'arrondir le rectangle? –

Questions connexes