[C#学习笔记14]控件的二次开发技术
控件的二次开发:以现有工具箱中的控件为基础,对其做再次封装,添加需要定义的功能控件
给文本框添加验证功能
继承——类的开发者封装了相关功能,使用根据需要在此基础上扩展相关功能(属性、方法),A类继承B类,A具有B的所有功能(成员)
特性:
1、单根性——一个类只能继承一个父类,不能多重继承
2、传递性——A-〉B B-〉C A同时具有B和C的功能
普通继承——随时可以使用,避免相同代码重复
继承多态——实现系统扩展性
新建类创建控件,新建组件类,添加errorProvider错误提示
//引入窗体的命名空间
using System.Windows.Forms;
using System.Text.RegularExpressions;//这则表达式使用的命名空间
namespace MyUIControl
{
public partial class SuperTextBox : TextBox//自动生成的代码中Component->TextBox
{
public SuperTextBox()
{
InitializeComponent();
}
public SuperTextBox(IContainer container)
{
container.Add(this);
InitializeComponent();
}
/// <summary>
/// 非空验证
/// </summary>
/// <returns></returns>
public int BeginCheckEmpty()
{
if (this.Text.Trim() == "")
{
this.errorProvider.SetError(this, "必填项不能为空!");
return 0;
}
else
{
this.errorProvider.SetError(this, string.Empty);
return 1;
}
}
/// <summary>
/// 使用正则表达式验证复杂数据
/// </summary>
/// <param name="regularExpress"></param>
/// <param name="errorMsg"></param>
/// <returns></returns>
public int BeginCheckData(string regularExpress, string errorMsg)
{
if (BeginCheckEmpty() == 0) return 0;//如果为空,则直接返回
//正则表达式验证(忽略大小写)
Regex objRegex = new Regex(regularExpress, RegexOptions.IgnoreCase);
if (!objRegex.IsMatch(this.Text.Trim()))
{
this.errorProvider.SetError(this, errorMsg);
return 0;
}
else
{
this.errorProvider.SetError(this, string.Empty);//清除小圆点的错误提示
return 1;
}
}
//根据需要把常用的正则表达式验证封装到这里...
}
}
窗口类显示
int a = this.txtName.BeginCheckEmpty();
int b = this.txtAge.BeginCheckpty();
int c = this.txtAge.BeginCheckData(@"^[1-9]\d*$", "年龄必须是正整数!");
int result = a * b * c;
if (result != 0)
{
//封装对象,提交到数据库...
MessageBox.Show("提交成功!", "信息提示");
}
二次开发控件的引用
将生成控件的.dll类库文件添加到工具箱中:工具箱空白处右键添加选项卡,选择工具箱项添加自己的控件库文件
控件:微软提供可视化方式操作的对象
自定义用户控件:用开发工具里面现有控件做二次开发
添加类库做用户控件——添加用户控件(进度条)——一个label去掉文本添加背景色绿色,一个复制label背景色为白色覆盖绿色的label,一个label显示百分比——添加属性高度、宽度、进度值可读写并加以约束