2008-09-16 19 views
12

Trong C# .NET Tôi đang cố lập trình thay đổi màu của đường viền trong hộp nhóm.Làm cách nào để thay đổi màu của đường viền trên hộp nhóm?

Cập nhật: Câu hỏi này được hỏi khi tôi đang làm việc trên hệ thống winforms trước khi chúng tôi chuyển sang .NET.

+0

@Amy Kiểm tra _user1944617_ câu trả lời, nó thực sự tốt và cao cấp để chấp nhận một. vừa thử và vừa hoàn hảo với thiết kế hộp nhóm mặc định. – Drake

Trả lời

14

xây dựng trên câu trả lời trước, một giải pháp tốt hơn bao gồm các nhãn cho các nhóm hộp:

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

Bạn có thể muốn điều chỉnh x/y cho các văn bản, nhưng để sử dụng tôi đây là vừa phải .

+0

Cảm ơn @Mick Bruno, bạn đã dành cho tôi một số thời gian nghiêm túc :) –

+1

Thx! Để xóa đường viền, sử dụng 'box.Parent.BackColor', như tôi đã làm. – dwo

1

Tôi không chắc chắn điều này áp dụng cho mọi trường hợp, nhưng nhờ vào chủ đề này, chúng tôi nhanh chóng nối vào sự kiện Sơn lập trình sử dụng:

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

Cheers!

5

Chỉ cần đặt hành động sơn trên bất kỳ đối tượng nào (không chỉ các nút) vào phương pháp này để vẽ đường viền.

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

    } 

Nó vẫn không đẹp và tròn như bản gốc nhưng nó đơn giản hơn nhiều.

24

Chỉ cần thêm sự kiện sơn.

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

Có cách nào để làm dày đường viền và làm tròn hình chữ nhật không? –