从UserControl传回信息

时间:2009-03-20 19:57:40

标签: c# winforms validation

我正在掌握UserControl的概念。

我创建了一个UserControl,将一些在TabControl的各个页面上重复的控件组合在一起。

其中一些控件是需要验证的文本字段,当验证失败时,我需要显示错误消息。但是,我想要显示错误消息的位置在主窗体的状态栏上。

在这种情况下处理验证/错误显示的最佳方法是什么?

5 个答案:

答案 0 :(得分:4)

要处理验证,请执行以下操作之一:

  • 使用用户控件中的方法进行验证
  • 让您的用户控件具有可以处理验证的delegate属性(例如ValidationHandler)(这将允许您拥有一组可以分配给您的验证器的类你的控件)

    public delegate void Validator(...)

    public Validator ValidationHandler { get; set; }

  • 让您的用户控件生成验证请求event(例如ValidationRequested

    public event EventHandler<ValidationEventArgs> ValidationRequested

要通知系统发生了错误,请执行以下操作之一:

  • 使用感兴趣的各方可以订阅的event(例如ValidationFailed

  • 如果执行验证的对象(通过delegateevent)也是您要从中生成错误消息的对象,则可以自行引发错误消息。

修改

由于您已经说过要在控件内部进行验证,因此ValidationFailed事件的代码可能如下所示:

// In your user control

public class ValidationFailedEventArgs : EventArgs
{
   public ValidationFailedEventArgs(string message)
   {
      this.Message = message;
   }

   public string Message { get; set; }
}

private EventHandler<ValidationFailedEventArgs> _validationFailed;
public event EventHandler<ValidationFailedEventArgs> ValidationFailed
{
   add { _validationFailed += value; }
   remove { _validationFailed -= value; }
}

protected void OnValidationFailed(ValidationFailedEventArgs e)
{
   if(_validationFailed != null)
      _validationFailed(this, e);
}

private void YourValidator()
{
   if(!valid)
   {
      ValidationFailedEventArgs args = 
         new ValidationFailedEventArgs("Your Message");
      OnValidationFailed(args);
   }
}

// In your main form:

userControl.ValidationFailed += 
   new EventHandler<ValidationFailedEventArgs>(userControl_ValidationFailed);

// ...
private void userControl_ValidationFailed(object sender, 
                                          ValidationFailedEventArgs e)
{
   statusBar.Text = e.Message;
}

答案 1 :(得分:1)

如果您正在UserControl中进行验证,则可以让它提供公共ValidationFailed事件并在EventArgs中包含该消息。然后父控件可以订阅ValidationFailed事件并更新状态栏。

答案 2 :(得分:0)

您可以在用户控件上放置验证器,抛出异常,或将公共getter添加到您希望在父窗体中显示的字段中。

答案 3 :(得分:0)

在usercontrol上创建一个验证其字段的公共方法,并且可以传入字符串输出参数。

类似

    public bool IsValid(out string status)
{
 // do validation and set the status message
}

答案 4 :(得分:0)

您可以在用户控件中使用asp.net验证器,并在主窗体上使用验证摘要,它将为您列出错误。

对于其他类型的用途,您可以公开事件,并让包含该控件的页面订阅该事件并采取任何必要的操作。