一些设计思想的汇集(2)
来源:互联网 发布:多条sql语句一起执行 编辑:程序博客网 时间:2024/05/22 09:49
关于画面内容的check的设计
首先定义接口
public interface IValidator {
void Validate(object value);
}
及虚类
public abstract class AbstractValidator {
private string errorMessage;
public string ErrorMessage {
get { return errorMessage; }
set { errorMessage = value; }
}
protected bool IsEmptyString(object obj) {
if (obj == null || obj.ToString() == string.Empty) {
return true;
} else {
return false;
}
}
public AbstractValidator() {
return;
}
}
然后定义各个具体的check类,比如只能输入半角英数字的check
public class AlphabetAndNumberValiator : AbstractValidator, IValidator {
public void Validate(Object value) {
Regex regex = new Regex(@"[a-zA-Z0-9]");
if (!regex.IsMatch(value.ToString())) {
throw new ValidatorException(this.ErrorMessage);
}
}
public AlphabetAndNumberValiator() {
this.ErrorMessage = "请输入半角英数字";
}
}
最后定义容器
public class ActiveValidator {
private ErrorProvider errorProvider;
private Dictionary<Control, List<IValidator>> dic = new Dictionary<Control, List<IValidator>>();
private bool isAutoAddEventHandler = true;
public bool IsAutoAddEventHandler {
get { return isAutoAddEventHandler; }
set { isAutoAddEventHandler = value; }
}
public void AddValidator(Control control, IValidator validator) {
if (dic.ContainsKey(control)) {
if (dic[control].Contains(validator) == false) {
dic[control].Add(validator);
}
} else {
List<IValidator> list = new List<IValidator>();
list.Add(validator);
dic.Add(control, list);
control.Validating += new CancelEventHandler(this.DoValidation);
}
}
public bool DoAllValidation() {
this.errorProvider.Clear();
bool ret = false;
foreach (Control control in dic.Keys) {
foreach (IValidator validator in dic[control]) {
try {
validator.Validate(control.Text);
} catch (ValidatorException ex) {
this.errorProvider.SetError(control, ex.Message);
ret = true;
}
}
}
return ret;
}
private void DoValidation(object sender, EventArgs e) {
if (this.isAutoAddEventHandler) {
this.errorProvider.Clear();
Control control;
if (sender is Control) {
control = (Control)sender;
} else {
return;
}
List<IValidator> list;
if (dic.ContainsKey(control)) {
list = dic[control];
} else {
return;
}
foreach (IValidator validator in list) {
try {
validator.Validate(control.Text);
} catch (ValidatorException ex) {
this.errorProvider.SetError(control, ex.Message);
// TODO
}
}
}
}
public ActiveValidator(ErrorProvider errorProvider) {
this.errorProvider = errorProvider;
}
}
画面类追加例
this.validator = new ActiveValidator(this.errorProvider);
this.validator.AddValidator(this.TextBox1, new AlphabetAndNumberValiator());
同时,在提交button的click事件中,也可以调用this.validator.DoAllValidation(),做全画面注册控件的check.
- 一些设计思想的汇集(2)
- 一些设计思想的汇集(1)
- JQuery的一些设计思想
- 一些工具的汇集
- 汇集的一些文章
- 搜索汇集了一些设计相关的书籍
- Web分页技术的思想汇集
- NDK的一些文章汇集
- elasticsearch的一些优化汇集
- Hibernate一些变态的设计思想
- 一些大型工具软件的设计思想
- Android的一些设计思想(201603)
- 一些设计思想
- java基础思想汇集
- 汇集平时用到的一些命令
- Linux中的一些命令的汇集
- freeBSD中的一些设计思想
- 关于网站系统性能的一些设计思想
- 得失之间放手
- GBK和UTF8编码之间互相转换的两个函数
- 从SQL取出二进制文件并下载(多种文件类型)
- C#操作XML简明教程
- MES项目实施过程中,JAVA、英语听力学习中
- 一些设计思想的汇集(2)
- 内存管理
- .Net下二进制形式的文件(图片)的存储与读取
- 在ASP.NET下实现数字和字符相混合的验证码(C# Code)
- 关于通过IWebBrowser2访问IHTMLDocument2的安全限制的探索
- Javascript中常用的几个数字函数
- 网站相关信息的公开度
- Oracle PL/SQL语言入门
- 寂寞难耐