2008-09-16 43 views
12

En C# .NET estoy tratando de cambiar programáticamente el color del borde en un cuadro de grupo.¿Cómo se cambia el color del borde en un cuadro de grupo?

Actualización: Esta pregunta se me hizo cuando estaba trabajando en un sistema de winforms antes de cambiar a .NET.

+0

@Amy Compruebe _user1944617_ respuesta, es realmente agradable y superior a la que he aceptado. simplemente intenté y encajé perfectamente con el diseño de caja de grupo predeterminado. – Drake

Respuesta

14

Basándose en la respuesta anterior, una mejor solución que incluye la etiqueta para el cuadro de grupo:

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); 
} 

Es posible que desee ajustar la X/Y para el texto, pero para mi uso esta es la correcta .

+0

Gracias @Mick Bruno, me salvaste un tiempo serio :) –

+1

¡Gracias! Para eliminar el borde, use 'box.Parent.BackColor', como lo hice. – dwo

1

No estoy seguro de que esto se aplica a todos los casos, pero gracias a este tema, rápidamente nos enganchado en el evento Paint utilizando programación:

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

Salud!

5

Simplemente establezca la acción de pintura en cualquier objeto (no solo botones) en este método para dibujar un borde.

private void UserControl1_Paint(object sender, PaintEventArgs e) 
    { 
     ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, Color.Red, ButtonBorderStyle.Solid); 

    } 

Todavía no será bonito y redondeado como el original, pero es mucho más simple.

24

Solo agregue evento de pintura.

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

¿Hay alguna manera de espesar el borde y redondear el rectángulo? –

Cuestiones relacionadas