C# 如何制作非矩形Winform?

C# 如何制作非矩形Winform?,c#,winforms,C#,Winforms,我正在使用下面的代码更改winform的形状 它正在改变形状,但不像我想要的那样。 我需要的形式有弯曲的角落 我应该用什么积分来获得它 public void MakeNonRectangularForm() { var p = new GraphicsPath(); int width = ClientSize.Width; int height = ClientSize.Height; p.AddClosedCurve(new Point[] { new

我正在使用下面的代码更改winform的形状

它正在改变形状,但不像我想要的那样。 我需要的形式有弯曲的角落

我应该用什么积分来获得它

public void MakeNonRectangularForm()
{
    var p = new GraphicsPath();

    int width  = ClientSize.Width;
    int height = ClientSize.Height;

    p.AddClosedCurve(new Point[] { new Point(width / 2, height / 2), 
       new Point(width, 0), new Point(width, height / 3),
       new Point(width - width / 3, height),
       new Point(width / 7, height - height / 8)});

    Region = new Region(p);
}

下面是我以前用来创建圆角边的一些代码,使用
AddArc
和线条将边框拼接在一起:

(您可以使用
xRadius
yRadius
来实现所需的“圆度”)


在过去,许多mp3播放器,如Winamp或Windows Media Player,都有一些特殊的主题,带有用图像绘制的自由形式窗口,如椭圆形或叶形。曲线由alpha通道平滑。如果从32位颜色更改为24位颜色,您将看到锯齿状的瑕疵
int xRadius = {insert value here};
int yRadius = {insert value here};

GraphicsPath edge = new GraphicsPath();

int rightHandLeft = this.Width - xRadius - 1;
int bottomSideTop = this.Height - yRadius - 1;

edge.AddArc(0, 0, xRadius, yRadius, 180, 90);
edge.AddLine(xRadius, 0, rightHandLeft, 0);

edge.AddArc(rightHandLeft, 0, xRadius, yRadius, 270, 90);
edge.AddLine(this.Width, yRadius, this.Width, bottomSideTop);

edge.AddArc(rightHandLeft, bottomSideTop, xRadius, yRadius, 0, 90);
edge.AddLine(rightHandLeft, this.Height, xRadius, this.Height);

edge.AddArc(0, bottomSideTop, xRadius, yRadius, 90, 90);
edge.AddLine(0, bottomSideTop, 0, yRadius);

this.Region = new Region(edge);