科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道自验证文本框和Observer模式

自验证文本框和Observer模式

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

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

作者:中国IT实验室 来源:中国IT实验室 2007年10月2日

关键字: 自验证 编程

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共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 成员
        
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();
        }

        
#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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章