在C#中通过设置其区域来制作不规则形状的表单窗口

理论上,您可以通过设置其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 关闭表单。

(简单结束)

相关推荐
pengdott几秒前
Linux用户态与内核态的深度剖析
linux·运维·服务器
老歌老听老掉牙3 分钟前
PyQt5中RadioButton互斥选择的实现方法
开发语言·python·qt
一路往蓝-Anbo6 分钟前
C语言从句柄到对象 (四) —— 接口抽象:从 Switch-Case 到通用接口
c语言·开发语言·stm32·嵌入式硬件
钰fly6 分钟前
Windows Forms开发工具与功能总结表
前端·c#
于齐龙6 分钟前
2025年12月23日 - 计算机组成原理
服务器
csbysj20206 分钟前
WebPages 数据库:构建现代网页管理的基石
开发语言
lzhdim8 分钟前
C#性能优化:从入门到入土!这10个隐藏技巧让你的代码快如闪电
开发语言·性能优化·c#
姚青&9 分钟前
三.文件处理命令-文件查看
linux·运维·服务器
沐知全栈开发9 分钟前
C 标准库 - `<stdarg.h>`
开发语言
两个人的幸福online10 分钟前
给cocos 3.8 消息控制器
开发语言·javascript·ecmascript