理论上,您可以通过设置其TransparencyKey属性来使表单的某些部分消失,从而
制作出形状表单。
实际上,此功能在 .NET 的最新版本中出现了错误,因此它并不总是在每台计算机上都能正常工作。
另一种方法是创建一个定义窗体形状的区域,然后将窗体的Region属性设置为该区域。
示例程序使用以下代码使其形式呈现星形。
cs
private void Form1_Load(object sender, EventArgs e)
{
// Make points to define a polygon for the form.
PointF[] pts = new PointF[10];
float cx = (float)(this.ClientSize.Width * 0.5);
float cy = (float)(this.ClientSize.Height * 0.5);
float r1 = (float)(this.ClientSize.Height * 0.45);
float r2 = (float)(this.ClientSize.Height * 0.25);
float theta = (float)(-Math.PI / 2);
float dtheta = (float)(2 * Math.PI / 10);
for (int i = 0; i < 10; i += 2)
{
pts[i] = new PointF(
(float)(cx + r1 * Math.Cos(theta)),
(float)(cy + r1 * Math.Sin(theta)));
theta += dtheta;
pts[i + 1] = new PointF(
(float)(cx + r2 * Math.Cos(theta)),
(float)(cy + r2 * Math.Sin(theta)));
theta += dtheta;
}
// Use the polygon to define a GraphicsPath.
GraphicsPath path = new GraphicsPath();
path.AddPolygon(pts);
// Make a region from the path.
Region form_region = new Region(path);
// Restrict the form to the region.
this.Region = form_region;
}
代码使用循环初始化一个数组,其中包含定义星形的点。
它创建一个 GraphicsPath 并使用其AddPolygon方法将由点定义的多边形添加到路径。
然后它根据GraphicsPath创建一个Region并设置窗体的Region属性。
位于区域之外的表单部分将被剪裁,因此它们不会出现,也不会响应鼠标事件。
但是,表单的系统命令仍然有效,因此您仍然可以通过按 Alt+F4 关闭表单。
(简单结束)