2008-09-16 15 views
12

In C# .NET versuche ich programmgesteuert die Farbe des Rahmens in einem Gruppenfeld zu ändern.Wie ändern Sie die Farbe des Rahmens in einer Gruppenbox?

Update: Diese Frage wurde gestellt, als ich an einem Winforms-System arbeitete, bevor wir zu .NET wechselten.

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

Prost: mit

+0

@Amy Check _user1944617_ antwort, es ist wirklich nett und überlegen imho zu akzeptiert. gerade versucht und tadellos mit Standardgruppe Kastenentwurf gepasst. – Drake

Antwort

14

Aufbauend auf der vorherige Antwort, eine bessere Lösung, die die Bezeichnung für die Gruppe Box enthält:

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

Sie könnten das x/y für den Text anpassen mögen, aber für meine Anwendung ist dies genau das Richtige .

+0

Danke @Mick Bruno, du hast mir eine ernsthafte Zeit gerettet :) –

+1

Thx! Um den Rahmen zu entfernen, benutze 'box.Parent.BackColor', wie ich es tat. – dwo

1

Ich bin mir nicht sicher, dass dies auf jeden Fall gilt, aber dank diesem Thread, wir schnell in das Paint-Ereignis programm süchtig!

5

Legen Sie einfach die Malaktion für ein beliebiges Objekt (nicht nur Schaltflächen) für diese Methode fest, um einen Rahmen zu zeichnen.

Es wird immer noch nicht hübsch und abgerundet wie das Original, aber es ist viel einfacher.

24

Fügen Sie einfach malen Ereignis hinzu.

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

Gibt es eine Möglichkeit, die Grenze zu verdichten und das Rechteck zu runden? –

Verwandte Themen