目录
2.1,使用特性将自定义属性添加到属性窗口并进行注解,分类。
1,创建类库添加自定义控件。
1.1,引用程序集
System.Drawing程序集,System.Windows.Froms程序集。
1.2,添加自定义控件类。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;
namespace WinFormCustomControlLibrary
{
[ToolboxBitmap(typeof(SuperTextBox), "tubiao.ico")]
public class SuperTextBox : TextBox
{
public SuperTextBox()
{
}
//创建一个错误提示Errorprovider
ErrorProvider provider = new ErrorProvider();
/// <summary>
/// 对输入内容进行正则表达式验证
/// </summary>
/// <param name="regularExpression">正则表达式</param>
/// <param name="errorInfo">提示的错误信息</param>
/// <returns></returns>
public bool ValidationRule(string regularExpression, string errorInfo)
{
if (!System.Text.RegularExpressions.Regex.IsMatch(this.Text, regularExpression))
{
provider.SetError(this, errorInfo);
return false;
}
provider.SetError(this, null);
return true;
}
}
}
1.3,变更默认的自定义控件图标。
1.3.1,控件图标要求。
大小:控件的图标必须是 16x16 位图图像。
文件类型:图标可以是位图 (.bmp) 或 Windows 图标 (.ico) 文件。
透明度:洋红色(RGB:255,0,255,Hex:0xFF00FF)呈现透明。
主题:Visual Studio 有多个主题,但每个主题要么是深色,要么是浅色。 图标应设计为浅色主题。 当 Visual Studio 使用深色主题时,图标中的深色和浅色将自动反转。
1.3.2,添加控件图标文件。
将图标图片复制到程序根目录下,在解决方案管理器中在项目名称右键选择“添加”—>“添加现有项”,将图标图片加入到项目中,对图片资源的属性进行修改,将“生成操作”一栏该为“嵌入的资源”。
1.3.3,自定义类附加特性变更图标。
注意该特性位于System.Drawing程序集中。
[ToolboxBitmap(typeof(SuperButton), "Resources.tu.ico")]
public class SuperButton:Button
{
//必须有一个无参构造函数
public SuperButton()
{
}
}
此例中的图标位置 "Resources.tu.ico" 表示:根目录下的Resources文件夹下的tu.ico图片。这里需要特别注意:
Resources是位于根目录下的文件夹而不是常见的位于执行文件目录下的文件夹。
图标路径文件夹层级之间用 . 而不是 / 。
1.3.4,效果呈现。
默认图标 | 自定义图标 |
1.4,注意事项。
1.4.1,自定义控件类包含无参构造函数。
1.4.2,自定义组件类访问级别是Public。
1.4.3,实现了IComponent接口。
2,属性窗口添加自定义属性。
[System.Drawing.ToolboxBitmap(typeof(SuperProgressBar), "Resources.progressBar.ico")]
public partial class SuperProgressBar : UserControl
{
public SuperProgressBar()
{
InitializeComponent();
CurrentValue = 20;
}
double currentValue = 0;
[Browsable(true), Category("自定义属性"),Description("当前进度值")]
/// <summary>
/// 当前值
/// </summary>
public double CurrentValue
{
get
{
return currentValue;
}
set
{
if (value > 100)
{
currentValue = 100;
}
else if(value<0)
{
currentValue = 0;
}
else
{
currentValue = value;
}
lblBlank.Size =new Size(lblBack.Size.Width, Convert.ToInt32( (100 - currentValue) / 100.0 * lblBack.Height));
lblValue.Text = $"{currentValue}%";
}
}
[Browsable(true),Category("自定义属性"),Description("填充进度条颜色")]
/// <summary>
/// 填充颜色
/// </summary>
public Color Color
{
get
{
return lblBack.BackColor;
}
set
{
lblBack.BackColor = value;
}
}
//调整控件大小时自动调用
protected override void OnResize(EventArgs e)
{
lblBlank.Height = Convert.ToInt32((100 - currentValue) / 100.0 * lblBack.Height);
//杜绝调整时偶尔出现宽度变化不一致。
lblBlank.Width = lblBack.Width;
base.OnResize(e);
}
}
2.1,使用特性将自定义属性添加到属性窗口并进行注解,分类。
double currentValue = 0;
[Browsable(true), Category("自定义属性"),Description("当前进度值")]
/// <summary>
/// 当前值
/// </summary>
public double CurrentValue
{
get
{
return currentValue;
}
set
{
if (value > 100)
{
currentValue = 100;
}
else if(value<0)
{
currentValue = 0;
}
else
{
currentValue = value;
}
lblBlank.Size =new Size(lblBack.Size.Width, Convert.ToInt32( (100 - currentValue) / 100.0 * lblBack.Height));
lblValue.Text = $"{currentValue}%";
}
}
效果:
2.2,使用OnResize()方法在拉伸控件时合理布局。
//调整控件大小时自动调用
protected override void OnResize(EventArgs e)
{
lblBlank.Height = Convert.ToInt32((100 - currentValue) / 100.0 * lblBack.Height);
//杜绝调整时偶尔出现宽度变化不一致。
lblBlank.Width = lblBack.Width;
base.OnResize(e);
}
3,添加自定义控件。
如果二次开发控件的类库与开发程序位于同一解决方案中,该开发程序的工具箱自动添加二次开发的控件。
如果是第三方提供的.dll,则在工具箱内单击右键: 选择项 ->.Net Framework组件->浏览->选择需要加载的.dll。
注意:加载的dll文件所放置的路径不能包含中文字符,如果包含则加载该dll时将弹出 “没有可放置在工具箱的组件”的对话框,如下所示:
如果实在不能避免可直接手动将.dll拖拽到工具箱,那时将自动将该.dll包含的组件添加到工具箱。
4,使用自定义控件。
5,屏幕录制软件。
自己动手丰衣足食,哈哈,自己编写的一款录制屏幕任意区域的软件,并将录制的结果转为gif文件,方便效果展示。