2016-03-23 23 views
0

Die anderen Lösungen auf dieser Website haben für mich nicht funktioniert so, um herauszufinden, ich versuche, was ich falsch mache:Zeichnen Sie einen Rahmen um GroupBox C#

Dies ist WinForm App

private void dk_buff_box_Paint(object sender, PaintEventArgs e) 
    { 
     Console.WriteLine("INSIDE!!"); 
     ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, Color.Red, ButtonBorderStyle.Solid); 
     GroupBox box = sender as GroupBox; 
     DrawGroupBox(box, e.Graphics, Color.Red, Color.Black); 
    } 
    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)); 
     } 
    } 

Dieser Code löst niemals den "INSIDE !!" zu meiner Konsolenausgabe und der Rahmen um die Groupbox (genannt dk_buff_box) ist immer grau und sehr hell. (Ich nehme an, dass das Standard ist ??)

Was muss ich tun, um diese Grenze zu ändern, um Farbe zu ändern? Ich habe ein paar .cs-Dateien, die zusammenarbeiten (Steuerelemente) Die Hauptdatei .cs ist form1.cs. Der obige Code befindet sich in einer separaten CS-Datei namens darkknightinfo.cs

Sollte der Code auf dem Hauptformular sein? oder sollte es in der .cs-Datei sein, die die eigentliche Groupbox enthält?

Was muss ich tun, damit _Paint() den Code richtig aktiviert und ausführt, um die Gruppenrahmen-Rahmenfarbe zu ändern?

+0

Warum fügen Sie den Rahmen in WPF XAML nicht hinzu? –

+0

Was ist WPF XAML? – DerekConlon

+0

Ist es WPF oder WinForm App? Bitte klären Sie. –

Antwort

0

Wenn Sie eine winForm-Anwendung erstellen, muss die Konsole programmgesteuert geöffnet werden, sie kann nicht nur mit Console.WriteLine geöffnet werden. Sie verwenden auch PaintEventArgs, die für (wie der Name schon sagt) Paint, Bitmap etc.

+0

Es ist eine WinForm-Anwendung. Ich benutze PaintEventArgs (wie Sie oben in meinem Code sehen können) und Console.WriteLine wird verwendet, da es überall in meinem Projekt verwendet wurde und gut funktioniert. Das Problem ist, dass das Ereignis nicht aufgerufen wird und das ist meine Frage. – DerekConlon

Verwandte Themen