知识大全 自验证文本框和Observer模式

Posted

篇首语:人的知识愈广,人的本身也愈臻完善。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 自验证文本框和Observer模式相关的知识,希望对你有一定的参考价值。

自验证文本框和Observer模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  最近写程序当中需要做一个表单提交(WinForm) 当所有的表单项目符合要求时 提交按钮为可用 否则不可用 一般我们需要写一个验证的函数 然后触发TextBox的某个事件来调用函数 函数中记录下是否所有的表单项目都符合要求 是则提交按钮可用

  关于自验证本文框 在CodeProject上找到了TextBoxRegex 是一个不错的自验证TextBox

  关于Observer模式 按照四人团的说法 Observer 模式的意图是 定义对象间的一种一对多的依赖关系 当一个对象的状态发生改变时 所有依赖于它的对象都得到通知并自动更新

  直接给代码

  第一步 定义两个接口

  IObserver接口

    public interface IObserver             void Update();        void Attach(ISubject sub);        void Detach(ISubject obs);        IList MySubject   get;      

  ISubject接口

public interface ISubject             IList MyObserver   get ;          void Attach(IObserver obs);        void Detach(IObserver obs);        void Notify();        bool IsValided();    

  第二步 写TextBox Button控件 这里用到了TextBoxRegex

  TextBox控件

    public class CNWTextbox : TextBoxRegex  ISubject             private ArrayList obsList;        public CNWTextbox()                     obsList = new ArrayList();            this UseInvalidTextException = true;                ISubject 成员#region ISubject 成员        public IList MyObserver                     get   return obsList;                 public void Attach(IObserver obs)                     obsList Add(obs);            obs Attach(this);                public void Detach(IObserver obs)                     obsList Remove(obs);            obs Detach(this);                public void Notify()                     foreach (IObserver obs in obsList)                             obs Update();                            #endregion        protected override void OnTextChanged(EventArgs e)                     base OnTextChanged(e);            //通知所有Observer更新自己             Notify();                public bool IsValided()                     try                             string temp = this TextValidated;                return true;                        catch (Chopeen InvalidTextException ex)                             Console WriteLine(ex ToString());                return false;                        

  Button控件

public class CNWButton:Button IObserver             private ArrayList mySubjects;        public CNWButton()                     mySubjects = new ArrayList();                IObserver 成员#region IObserver 成员        void IObserver Update()                     foreach (ISubject sub in mySubjects)                             if (sub IsValided())                                     this Enabled = true;                                else                                     this Enabled = false ;                    break;                                            void IObserver Attach(ISubject sub)                     mySubjects Add(sub);                void IObserver Detach(ISubject sub)                     mySubjects Remove(sub);                System Collections IList IObserver MySubject                     get   return mySubjects;                 #endregion    

  第三步 使用

  cnwTextbox cnwTextbox cnwButton 是上面制作的控件

private void Form _Load(object sender  EventArgs e)                     cnwTextbox Attach(cnwButton );            cnwTextbox Attach(cnwButton );         cha138/Article/program/net/201311/13047

相关参考