如何在c#中创建非矩形窗体?

时间:2011-03-26 20:53:16

标签: c# .net winforms

有没有办法在c#或.net中创建非矩形窗口形式,如圆形或椭圆形? 我看到这些独特的窗户形状,在我看过的几个装置里看起来很整洁。

此外,对于非标准形式,例如可持续性,崩溃等,使用这种设计是否有任何不利之处?

5 个答案:

答案 0 :(得分:12)

表单具有Region属性,您可以在其中指定您创建的任何形状。 例如,要创建椭圆形式,您可以在Form1_Load()形式的方法中使用此代码:

 GraphicsPath path = new GraphicsPath();
 path.AddEllipse(0,0,this.Width,this.Height);
 Region region = new Region(path);
 this.Region = region;

风险在于,当您创建非矩形表单并关闭时,最小化按钮会按区域被截断,然后某些最终用户可能会在关闭应用程序时遇到问题。

答案 1 :(得分:4)

我曾经做过类似的事情。您可以覆盖OnPaint方法。像这样:

protected override void OnPaint( System.Windows.Forms.PaintEventArgs e )
{
    GraphicsPath wantedshape = new GraphicsPath();
    wantedshape.AddEllipse(0, 0, this.Width, this.Height);
    this.Region = new Region(wantedshape);
}

并将FormBorderStyle属性设置为FormBorderStyle.None

使用非标准表格没有风险。只需创建用户想要的应用程序即可。 :)

答案 2 :(得分:2)

最简单的方法是制作一个没有边框和透明背景的窗口,并使用图像来定义实际形状。或者,您可以创建一个窗口,其中包含定义形状的自定义Region

答案 3 :(得分:1)

使用region。您可以通过设置其Region属性使任何Windows窗体控件采取任何形状。区域可以是矩形,椭圆,多种形状的组合,甚至可以从位图生成它。

答案 4 :(得分:0)

 System.Drawing.Drawing2D.GraphicsPath objGP = new System.Drawing.Drawing2D.GraphicsPath();
        objGP.AddEllipse(new  Rectangle(0, 0, this.Width, this.Height));
        this.Region = new Region(objGP);

        System.Drawing.Graphics formGraphics = this.CreateGraphics();
        string drawString = DtDaysRemaining;
        System.Drawing.Font drawFont = new System.Drawing.Font("Arial", 20);
        System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
        float x = 20;
        float y = 20;
        System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat();
        formGraphics.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat);
        drawFont.Dispose();
        drawBrush.Dispose();
        formGraphics.Dispose();