扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本页阅读全文(共2页)
最近写程序当中需要做一个表单提交(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
}
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。