65.9K
CodeProject 正在变化。 阅读更多。
Home

用于执行 WinForms 验证的错误日志类

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2011 年 9 月 22 日

CPOL
viewsIcon

17724

使用错误日志控件验证表单。

在验证 Windows Forms 时,我发现使用多个错误提供程序相当笨拙。 因此,我决定创建一个错误日志,该日志会自动创建与表单验证方法所需的错误提供程序一样多的数量。 该类在本技巧的末尾列出。

使用该类

  1. 声明一个错误日志成员
  2. private ErrorLog _eLog;
  3. loadshown 事件中创建一个错误日志实例
  4. eLog = new ErrorLog(this);
  5. 创建一个使用错误日志的验证方法
  6. private bool IsDataOk() {      
      _eLog.Clear();
      if (txtProjectName.Text == "") {
        _eLog.AddError(txtProjectName, "Project name is obligatory");
      }else if( Project.IsUnique(txtProjectName.Text ) == false){
        _eLog.AddError(txtProjectName, "Project name must be unique");
      }
      //IMPORTANT : Notice each control must have its own if..elseif block
      if (txtPlannedDate.Text == ""){
        _eLog.AddError(txtPlannedDate, "Planned date is obligatory");
      }
      return _eLog.IsOk();
    }

错误日志类如下

public class ErrorLog {
    ContainerControl _parent;
    List _log;
    List _controls;//Unnecesary : Kept only for a future error summary control

    public int Count {
      get { return _log.Count; }
    }
    public string GetMessage(int idx) {
      string result = "";
      int itop = _log.Count;
      if (idx <= itop) {        
        result = _log[idx].GetError(_controls[idx]);     
      }
      return result;
    }
    public ErrorLog(ContainerControl parent) {
      _parent = parent;
      _log = new List();
      _controls = new List();
    }
    public void Clear() {
      _log.Clear();
      _controls.Clear();
    }
    public void AddError(Control control, string message) {
      ErrorProvider p = new ErrorProvider(_parent);
      p.SetError(control, message);
      _log.Add(p);
      _controls.Add(control);
    }
    public bool IsOk(){
      if (_log.Count == 0) {
        return true;
      } else {
        return false;
      }
    }    
}
© . All rights reserved.