В настоящее время я пытаюсь нарисовать округлый прямоугольник с градиентом на панели bar
в форме.C# - Рисование округленного прямоугольника на панели
Из некоторых исследований я нашел код, который позволил мне создать пользовательский прямоугольник:
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);
}
}
Кредит на этот page
Далее с помощью этого пользовательского прямоугольника, я попытался с помощью метода paint
для bar
панель.
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();
}
Но после выполнения этого кода, он печатает только скругленный прямоугольник непосредственно на форму и позади bar
панели.
У меня есть другие методы, которые заполняют панель со стандартным прямоугольником с помощью PaintEventArgs e
:
e.Graphics.FillRectangle(myBrush , otherBar.ClientRectangle);
Так, очевидно, что нужно использовать PaintEventArgs e
в моем методе пользовательского прямоугольника, но я не знаю, как и где.
Если есть лучшие способы, чем этот способ рисования закругленных прямоугольников, поделитесь им.
_System.Drawing.Graphics formGraphics = this.CreateGraphics(); _ Никогда не используйте 'control.CreateGraphics'! Никогда не пытайтесь кэшировать объект «Graphics»! Либо вставьте «битмап bmp», используя «Графика g = Graphics.FromImage (bmp)» или в событие «Paint» элемента управления, используя параметр «e.Graphics». – TaW
Попробуйте использовать графику для панели, а не для формы. –