委托和事件(7)——委托使用案例:数据验证控件

编写UserControl,UserControl内有一个textbox,需要对textbox中的值进行验证。将验证时机、验证报错等写在UserControl中,把数据的不同的校验逻辑通过Delegate动态指定。

public Validate Validator;
 private void textBox1_Validating(object sender, CancelEventArgs e)
        {
            if (Validator(textBox1.Text) == false)
            {
                MessageBox.Show("数据非法");
            }
        }
public delegate bool Validate(string txt);

设置不同的Validator即可。

修改校验的报错方式。userControl11是别人写的控件,使用者不用关心什么时候校验,校验出错的时候怎么报错,只要关心对数据进行校验就可以了,使用控件的人不用懂WinForm控件的开发。

控件使用者:不用关心控件在什么时候进行数据校验、校验出错怎么报错,只要指定校验算法就可以。

控件开发者:不用把校验算法写死在控件里。

委托代码:

    public partial class ValidationTextBox : UserControl
    {
        public ValidationDelegate OnValidation;

        public ValidationTextBox()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (OnValidation != null)
            {
                ValidationEventArgs args = new ValidationEventArgs();
                args.Value = textBox1.Text;
                args.IsValid = true;//是否合法
                OnValidation(args);
                if (args.IsValid == false)
                {
                    MessageBox.Show("数据错误!");
                }
            }
        }
    }

    public delegate void ValidationDelegate(ValidationEventArgs e); //定义一个委托

    public class ValidationEventArgs  //定义一个函数
    {
        public string Value { get; set; }
        public bool IsValid { get; set; }
    }

调用:

        public Form1()
        {
            InitializeComponent();

            txtUsername.OnValidation = UserName_Validation;
        }

        void UserName_Validation(ValidationEventArgs e)
        {
            if (e.Value.Length <= 2)
            {
                e.IsValid = false;
            }
        }

附加:

解耦:解除耦合。两边都是“糊涂”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值