博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一些设计思想的汇集(2)
阅读量:5990 次
发布时间:2019-06-20

本文共 2618 字,大约阅读时间需要 8 分钟。

  hot3.png

关于画面内容的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.

转载于:https://my.oschina.net/cjkall/blog/195903

你可能感兴趣的文章
js与浏览器相关的一些属性
查看>>
Visual Studio Code 快捷键 Mac 版
查看>>
jqgrid比较使用频繁但偏冷门的知识点
查看>>
Java并发编程71道面试题及答案
查看>>
JAVA S3 Example
查看>>
在使用jersey框架搭建服务时,经常会报出如下异常
查看>>
maven -- profile
查看>>
python字典中文显示的处理办法
查看>>
新手学习在Ubuntu 14.04搭建Javaweb网站(3)--下载Window客户端PuTTY
查看>>
一致性hash算法 - consistent hashing
查看>>
接口java.util.Map.Entry的使用
查看>>
FreeMarker | 取值篇
查看>>
《Linux0.11内核完全注释》读书笔记之内核启动方式总结
查看>>
Prefer Literal Syntax over the Equivalent methods
查看>>
安装 CAS 服务器
查看>>
U盘检测程序&文件递归
查看>>
画图小工具p图的方法
查看>>
GC策略&内存申请、对象衰老
查看>>
vim格式化代码
查看>>
mysql数据库时间字段CURRENT_TIME问题
查看>>