知识大全 自验证文本框和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相关参考