Feedback

C# - Rechteck mit abgerundeten Ecken zeichnen

Veröffentlicht von am 10/17/2006
(3 Bewertungen)
GDI+ bietet keine Möglichkeit, ein Rechteck mit abgerundeten Ecken zu zeichnen. Die Methode DrawRoundedRectangle, die dem C# 2005 Premium Codebook entstammt, übernimmt diese Aufgabe.
// **********************************************
// Dies ist eines der 322 Rezepte aus dem
// C# 2005 Premium Codebook. 
// Das Snippet wurde vom Autor mit freundlicher 
// Genehmigung von Addison Wesley 
// bei dotnet-snippets.de veröffentlicht.
// **********************************************


/// <summary>
/// Zeichnet ein Rechteck mit abgerundeten Ecken
/// </summary>
/// <param name="g">Referenz auf das Graphics-Objekt, auf dem gezeichnet werden soll</param>
/// <param name="x">X-Position des Rechtecks</param>
/// <param name="y">Y-Position des Rechtecks</param>
/// <param name="width">Breite des Rechtecks</param>
/// <param name="height">Höhe des Rechtecks</param>
/// <param name="cornerRadius">Radius der abgerundeten Ecken</param>
/// <param name="fillBrush">Brush, der für das Füllen des Rechtecks verwendet wird. Kann null sein.</param>
/// <param name="linePen">Pen, der für das Zeichnen des Rechteck-Randes verwendet wird. Kann null sein.</param>
public static void DrawRoundedRectangle(Graphics g,
   int x, int y, int width, int height,
   int cornerRadius, Brush fillBrush, Pen linePen)
{
   // Neuen GraphicsPath erzeugen ...
   GraphicsPath gp = new GraphicsPath();

   // ... und die Linien der Figur hinzufügen
   // Oben
   gp.AddLine(x + cornerRadius, y, x + width - cornerRadius, y);
   // Ecke rechts oben
   gp.AddArc(x + width - cornerRadius, y, cornerRadius,
      cornerRadius, 270, 90);
   // Rechts
   gp.AddLine(x + width, y + cornerRadius, x + width,
      y + height - cornerRadius);
   // Ecke rechts unten
   gp.AddArc(x + width - cornerRadius, y + height - cornerRadius,
      cornerRadius, cornerRadius, 0, 90);
   // Unten
   gp.AddLine(x + width - cornerRadius, y + height,
      x + cornerRadius, y + height);
   // Ecke links unten
   gp.AddArc(x, y + height - cornerRadius, cornerRadius,
      cornerRadius, 90, 90);
   // Links
   gp.AddLine(x, y + height - cornerRadius, x, y + cornerRadius);
   // Ecke links oben
   gp.AddArc(x, y, cornerRadius, cornerRadius, 180, 90);

   // Die Figur abschließen
   gp.CloseFigure();

   // Den Pfad mit dem übergebenen Pinsel füllen
   if (fillBrush != null)
   {
      g.FillPath(fillBrush, gp);
   }

   // Die Linien des Pfades zeichnen
   if (linePen != null)
   {
      g.DrawPath(linePen, gp);
   }
}
Abgelegt unter GDI+, Rechteck, zeichnen.

1 Kommentare zum Snippet

Tim Hartwig schrieb am 10/18/2006:
Guter Snippet und gut kommentiert 10P ;-)
 

Logge dich ein, um hier zu kommentieren!