关于C#中创建自定义形状控件的说明

在C#应用程序编程中有许多界面控件供我们使用,这些控件的形状都是规则的矩形,但是为了美观友好的UI体验,有时我们需要创建一些不规则的自定义形状的控件。
同样在C#中,类型Region是描述控件显示区域的类,类型GraphicsPath则表示一系列相互连接的直线和曲线,通过构造出闭合的不规则的GraphicsPath曲线来创建对应形状区域的Region对象,并设置控件的显示区域为此Region对象,就可以使控件按照GraphicsPath对象描述的形状来显示。
下面示例创建一个中间镂空的圆环控件(当然我们也可以添加其他任何形状的边界到GraphicsPath对象中,从而创建形状更加复杂的自定义控件):

一、创建一个原始的空白窗体Form:
csharp-region-control-1

二、在窗体Form的构造函数中添加如下代码:

// 创建用户控件
UserControl userControl = new UserControl();
// 设置用户控件大小
userControl.Width = 200;
userControl.Height = 200;
// 设置用户控件在父控件中居中显示
userControl.Location = new Point((this.ClientSize.Width - userControl.Width) / 2, (this.ClientSize.Height - userControl.Height) / 2);
// 设置用户控件背景色为红色
userControl.BackColor = Color.Red;
// 创建GraphicsPath对象
GraphicsPath graphicsPath = new GraphicsPath();
// 定义外部圆形区域
Rectangle outBounds = new Rectangle(0, 0, 200, 200);
// 定义内部圆形区域
Rectangle inBounds = new Rectangle(50, 50, 100, 100);
// 添加内外圆形区域到GraphicsPath对象中
graphicsPath.AddEllipse(outBounds);
graphicsPath.AddEllipse(inBounds);
// 设置用户控件Region对象
userControl.Region = new Region(graphicsPath);
// 将用户控件添加到窗体中
this.Controls.Add(userControl);

三、运行窗体Form,其中红色的圆环控件就是我们创建的自定义形状的控件:
csharp-region-control-2

更多信息请参阅:GraphicsPath 类 (System.Drawing.Drawing2D)Region 类 (System.Drawing)

发表评论