2008-09-16 34 views
12

C#.NETでは、グループボックスの境界線の色をプログラムで変更しようとしています。グループボックスの枠線の色を変更するにはどうすればよいですか?

更新:私がwinformsシステムで.NETに切り替える前に作業していたときにこの質問が尋ねられました。

+0

@Amyチェック_user1944617_答え、それは受け入れられたものに本当に素晴らしいと優れたimhoです。ちょうど試して、デフォルトのグループボックスデザインに完全に適合しました。 – Drake

答えて

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

あなたがテキストのためのx/yを調整することがありますが、私の使用のために、これはちょうどいいです。

+0

ありがとう@Mick Bruno、あなたは私に深刻な時間を救った:) –

+1

Thx!境界線を削除するには、私が行ったように 'box.Parent.BackColor'を使います。 – dwo

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

境界線を太くして四角形を丸める方法はありますか? –

関連する問題