有没有办法在c#或.net中创建非矩形窗口形式,如圆形或椭圆形? 我看到这些独特的窗户形状,在我看过的几个装置里看起来很整洁。
此外,对于非标准形式,例如可持续性,崩溃等,使用这种设计是否有任何不利之处?
答案 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();