我正在掌握UserControl的概念。
我创建了一个UserControl,将一些在TabControl的各个页面上重复的控件组合在一起。
其中一些控件是需要验证的文本字段,当验证失败时,我需要显示错误消息。但是,我想要显示错误消息的位置在主窗体的状态栏上。
在这种情况下处理验证/错误显示的最佳方法是什么?
答案 0 :(得分:4)
要处理验证,请执行以下操作之一:
让您的用户控件具有可以处理验证的delegate
属性(例如ValidationHandler
)(这将允许您拥有一组可以分配给您的验证器的类你的控件)
public delegate void Validator(...)
public Validator ValidationHandler { get; set; }
让您的用户控件生成验证请求event
(例如ValidationRequested
)
public event EventHandler<ValidationEventArgs> ValidationRequested
要通知系统发生了错误,请执行以下操作之一:
使用感兴趣的各方可以订阅的event
(例如ValidationFailed
)
如果执行验证的对象(通过delegate
或event
)也是您要从中生成错误消息的对象,则可以自行引发错误消息。
修改强>
由于您已经说过要在控件内部进行验证,因此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验证器,并在主窗体上使用验证摘要,它将为您列出错误。
对于其他类型的用途,您可以公开事件,并让包含该控件的页面订阅该事件并采取任何必要的操作。