Ich versuche gerade, ein gradient gefülltes abgerundetes Rechteck auf einem Panel bar
in einem Formular zu zeichnen.C# - Ein abgerundetes Rechteck auf einem Panel zeichnen
Von einigen Recherchen fand ich einige Code, der mir ein eigenes Rechteck zu erstellen erlaubt:
static class CustomRectangle
{
public static GraphicsPath RoundedRect(Rectangle bounds, int radius)
{
int diameter = radius * 2;
Size size = new Size(diameter, diameter);
Rectangle arc = new Rectangle(bounds.Location, size);
GraphicsPath path = new GraphicsPath();
if (radius == 0)
{
path.AddRectangle(bounds);
return path;
}
// top left arc
path.AddArc(arc, 180, 90);
// top right arc
arc.X = bounds.Right - diameter;
path.AddArc(arc, 270, 90);
// bottom right arc
arc.Y = bounds.Bottom - diameter;
path.AddArc(arc, 0, 90);
// bottom left arc
arc.X = bounds.Left;
path.AddArc(arc, 90, 90);
path.CloseFigure();
return path;
}
public static void FillRoundedRectangle(this Graphics graphics, Brush brush, Rectangle bounds, int cornerRadius)
{
if (graphics == null)
throw new ArgumentNullException("graphics");
if (brush == null)
throw new ArgumentNullException("brush");
using (GraphicsPath path = RoundedRect(bounds, cornerRadius))
{
graphics.FillPath(brush, path);
}
}
Kredit dieser page
Weiter, um dieses benutzerdefinierte Rechteck mit, ich habe versucht, die paint
Methode für die Verwendung von bar
Panel.
private void quickMenuBar_Paint(object sender, PaintEventArgs e)
{
LinearGradientBrush myBrush = new LinearGradientBrush(new Point(20, 20), new Point(120, 520), Color.DarkBlue, Color.RoyalBlue);
System.Drawing.Graphics formGraphics = this.CreateGraphics();
CustomRectangle.FillRoundedRectangle(formGraphics, myBrush, new System.Drawing.Rectangle(20, 20, 100, 500), 25);
myBrush.Dispose();
formGraphics.Dispose();
}
Aber nach diesem Code ausführen, druckt er nur ein abgerundetes Rechteck direkt auf die Form und hinter dem bar
Panel.
Ich habe noch andere Methoden, die ein Panel mit einem Standard-Rechteck mit PaintEventArgs e
füllen:
e.Graphics.FillRectangle(myBrush , otherBar.ClientRectangle);
So offensichtlich muß ich verwende PaintEventArgs e
in meiner benutzerdefinierten Rechteck-Methode, aber ich weiß nicht, wie oder wohin.
Wenn es bessere Möglichkeiten gibt, als diese Art, abgerundete Rectnagles zu zeichnen, bitte teilen.
_System.Drawing.Graphics formGraphics = this.CreateGraphics(); _ Verwenden Sie niemals 'control.CreateGraphics'! Versuchen Sie niemals ein 'Graphics' Objekt zu cachen! Zeichnen Sie entweder mit einem 'Graphics g = Graphics.FromImage (bmp)' oder im 'Paint' -Ereignis eines Steuerelements in eine' Bitmap bmp' mit dem 'e.Graphics' -Parameter. – TaW
Versuchen Sie, Grafiken für Panel zu verwenden, nicht für das Formular. –