C#中Region、Exclude的用法小结

 更新时间:2025年11月27日 09:11:11   作者:wangnaisheng  
本文主要介绍了C#中Region、Exclude的用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在 C# 中,RegionExclude 是与图形编程相关的概念,通常在使用 System.Drawing 命名空间进行 GDI+ 绘图时出现。它们主要用于定义和操作二维空间中的区域(几何区域),常用于窗体裁剪、控件重绘、图形绘制优化等场景。

一、Region的用法

Region 类(位于 System.Drawing 命名空间)表示一个屏幕上的区域,可以是矩形、椭圆、多边形,甚至是复杂组合形状。

1. 创建 Region 的方式:

using System.Drawing;

// 1. 从矩形创建
Rectangle rect = new Rectangle(10, 10, 100, 100);
Region region1 = new Region(rect);

// 2. 从椭圆创建
GraphicsPath path = new GraphicsPath();
path.AddEllipse(20, 20, 80, 80);
Region region2 = new Region(path);

// 3. 从 GraphicsPath 创建复杂形状
GraphicsPath complexPath = new GraphicsPath();
complexPath.AddPolygon(new Point[] {
    new Point(0, 0),
    new Point(50, 100),
    new Point(100, 0)
});
Region region3 = new Region(complexPath);

2. Region 的常用操作

  • Intersect:交集
  • Union:并集
  • Xor:异或
  • Exclude:排除(见下文)
  • Complement:补集
  • GetHrgn:获取 GDI 句柄(用于 Win32 API)

二、Exclude的用法

ExcludeRegion 类的一个方法,用于从当前区域中移除另一个区域,即执行“差集”操作。

方法签名:

public void Exclude(Rectangle rect);
public void Exclude(RectangleF rect);
public void Exclude(Region region);

示例:

// 创建一个大矩形区域
Region bigRegion = new Region(new Rectangle(0, 0, 200, 200));

// 创建一个小矩形区域(要排除的部分)
Rectangle hole = new Rectangle(50, 50, 100, 100);

// 从小区域中“挖掉”一个洞
bigRegion.Exclude(hole);

// 现在 bigRegion 是一个外框为 200x200,中间有 100x100 空洞的区域

实际应用场景:

创建非矩形窗体的透明区域

这样窗体就变成了一个“框”,中间是透明的(不可点击、不绘制)。

this.Region = new Region(new Rectangle(0, 0, 300, 300));
this.Region.Exclude(new Rectangle(50, 50, 200, 200)); // 中间挖空

绘制时排除某些区域不重绘

Graphics g = this.CreateGraphics();
Region updateRegion = g.Clip; // 获取当前裁剪区域
updateRegion.Exclude(someControl.Bounds); // 排除某个控件区域
g.Clip = updateRegion;
// 然后只绘制除该控件外的区域

三、注意事项

  • Region 是 GDI+ 资源,使用后应释放:
  • 在 WinForms 中,Control.Region 属性可以设置控件的可见/可点击区域。
  • Exclude 操作是破坏性操作,会修改原 Region 对象,而不是返回新对象。
  • 对于高性能图形应用,频繁创建/销毁 Region 可能影响性能,需注意优化。

四、总结

概念说明
Region表示一个二维区域,可用于裁剪、绘图、窗体形状控制等
Exclude从当前 Region 中移除指定区域,实现“差集”效果,常用于“挖洞”或排除绘制区域

这些功能在自定义控件、不规则窗体、动画特效等场景中非常有用。

到此这篇关于C#中Region、Exclude的用法小结的文章就介绍到这了,更多相关C# Region、Exclude内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于C#中XmlWriter写入Xml的深入分析

    基于C#中XmlWriter写入Xml的深入分析

    本篇文章是对C#中XmlWriter写入Xml进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#使用DevExpress中的XtraCharts控件实现图表

    C#使用DevExpress中的XtraCharts控件实现图表

    这篇文章介绍了C#使用DevExpress中的XtraCharts控件实现图表的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C#利用FileSystemWatcher实时监控文件的增加,修改,重命名和删除

    C#利用FileSystemWatcher实时监控文件的增加,修改,重命名和删除

    好多时候,我们都需要知道某些目录下的文件什么时候被修改、删除过等。本文将利用FileSystemWatcher实现实时监控文件的增加,修改,重命名和删除,感兴趣的可以了解一下
    2022-08-08
  • C#利用原图和水印图的重叠简单实现水印的方法

    C#利用原图和水印图的重叠简单实现水印的方法

    这篇文章主要介绍了C#利用原图和水印图的重叠简单实现水印的方法,实例演示了完整的水印操作类实现方法,需要的朋友可以参考下
    2016-04-04
  • C# VB 实现10进制 16进制之间互相转换

    C# VB 实现10进制 16进制之间互相转换

    如何将10进制转成16进制,又如何将16进制数转成10进制,本文将介绍C#和VB实现代码,需要了解的朋友可以参考下
    2012-11-11
  • 基于C# WinForms开发的Windows系统监控工具

    基于C# WinForms开发的Windows系统监控工具

    最近开发了一个轻量级的 Windows 系统监控工具,可以实时监控 CPU、内存、GPU、温度、网络流量等硬件信息,并通过曲线图表直观展示,本文分享一下开发过程中的核心技术点和关键代码实现,需要的朋友可以参考下
    2025-12-12
  • C#使用Socket实现心跳的方法示例

    C#使用Socket实现心跳的方法示例

    这篇文章主要介绍了C#使用Socket实现心跳的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C#操作word的方法示例

    C#操作word的方法示例

    这篇文章主要介绍了C#操作word的方法,结合实例形式分析了C#针对word文档的读取、写入、保存等相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • C#创建及访问网络硬盘的实现

    C#创建及访问网络硬盘的实现

    本文主要介绍了C#创建及访问网络硬盘的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C#登入实例

    C#登入实例

    本篇文章通过截图的方式向大家展示C#程序登陆实现的全过程,利用了C#三层架构的编写方法,希望对大家今后编写代码有所帮助
    2016-11-11

最新评论