2008-09-16 12 views
12

W języku C# .NET próbuję programowo zmienić kolor obramowania w polu grupy.Jak zmienić kolor ramki na ramce grupy?

Aktualizacja: To pytano kiedy pracowałem na systemie WinForm zanim włączony do .NET.

+0

@Amy Sprawdź _user1944617_ odpowiedź, jest naprawdę miła i lepsza do zaakceptowania. po prostu starałem się idealnie dopasować do domyślnego projektu skrzynki grupowej. – Drake

Odpowiedz

14

Opierając się na poprzedniej odpowiedzi, lepsze rozwiązanie, które zawiera etykietę polu Grupa:

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

może chcesz dostosować X/Y dla tekstu, ale dla mojego użytku to jest w sam raz .

+0

Dzięki @Mick Bruno, oszczędziłeś mi trochę czasu :) –

+1

Thx! Aby usunąć obramowanie, użyj 'box.Parent.BackColor', tak jak ja. – dwo

1

nie jestem pewien, że to odnosi się do każdego przypadku, ale dzięki tym wątku, szybko podłączyć do przypadku malowania programowo przy użyciu:

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

Cheers!

5

Wystarczy ustawić akcję malowania na dowolny obiekt (nie tylko przyciski) do tej metody narysować granicę.

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

    } 

Nadal nie będzie ładna i zaokrąglona jak oryginał, ale jest znacznie prostsza.

24

Wystarczy dodać zdarzenie farby.

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

Czy istnieje sposób na zagęszczenie granicy i dookoła prostokąta? –