2008-09-16 2 views
12

В C# .NET Я пытаюсь программно изменить цвет рамки в поле группы.Как изменить цвет рамки в групповом поле?

Обновление: этот вопрос задавали, когда я работал над системой winforms, прежде чем переключиться на .NET.

+0

@Amy Check _user1944617_ ответ, это действительно хорошо и превосходно imho, чтобы принять его. просто пробовал и идеально вписывался в дизайн групповой коробки по умолчанию. – Drake 2014-03-05 11:17:23

ответ

14

Опираясь на предыдущий ответ, лучшее решение, которое включает в себя ярлык для окна группы:

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

Вы можете захотеть настроить х/у для текста, но для моего использования это только право ,

+0

Спасибо @ Мик Бруно, ты спас мне какое-то серьезное время :) – 2012-01-11 02:23:10

+1

Thx! Чтобы удалить границу, используйте `box.Parent.BackColor`, как и я. – dwo 2013-10-11 11:12:03

1

Я не уверен, что это относится к каждому случаю, но благодаря этой теме, мы быстро подключили к событию Paint программно с помощью:

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

Ура!

5

Просто установите действие краски на любой объект (а не только кнопки) на этот метод, чтобы нарисовать границу.

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

    } 

Это все еще не будет красивым и округлым, как оригинал, но это намного проще.

24

Просто добавьте событие рисования.

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)); 
     } 
    } 
Смежные вопросы