C# 从用户控件传回信息
我刚刚开始掌握UserControl的概念 我创建了一个UserControl,将在TabControl的各个页面上复制的多个控件组合在一起 其中一些控件是需要验证的文本字段,当验证失败时,我需要显示错误消息。但是,我要显示错误消息的位置是在主窗体的状态栏上C# 从用户控件传回信息,c#,winforms,validation,C#,Winforms,Validation,我刚刚开始掌握UserControl的概念 我创建了一个UserControl,将在TabControl的各个页面上复制的多个控件组合在一起 其中一些控件是需要验证的文本字段,当验证失败时,我需要显示错误消息。但是,我要显示错误消息的位置是在主窗体的状态栏上 在这种情况下,处理验证/错误显示的最佳方法是什么?您可以将验证程序放在用户控件本身上,引发异常,或者将公共getter添加到要在父窗体中显示的字段中。您可以将验证程序放在用户控件本身上,引发异常,或者将公共getter添加到要在父窗体中显示
在这种情况下,处理验证/错误显示的最佳方法是什么?您可以将验证程序放在用户控件本身上,引发异常,或者将公共getter添加到要在父窗体中显示的字段中。您可以将验证程序放在用户控件本身上,引发异常,或者将公共getter添加到要在父窗体中显示的字段。在usercontrol上创建一个公共方法,验证其字段,然后可以传入字符串输出参数 大概是
public bool IsValid(out string status)
{
// do validation and set the status message
}
在usercontrol上创建一个验证其字段的公共方法,然后可以传入一个字符串输出参数 大概是
public bool IsValid(out string status)
{
// do validation and set the status message
}
要处理验证,请执行以下操作之一:
- 使用用户控件内的方法进行验证
- 让您的用户控件具有一个可以处理验证的属性(例如,
)(这将允许您拥有一个包含一组可分配给控件的验证器的类)ValidationHandler
公共委托无效验证程序(…)
public Validator ValidationHandler{get;set;}
- 让您的用户控件生成验证请求(例如,
)ValidationRequested
请求的公共事件事件处理程序验证
- 使用相关方可以订阅的许可证(例如,
)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;
}
//在用户控件中
公共类验证失败EventTargets:EventArgs
{
公共验证失败事件目标(字符串消息)
{
this.Message=消息;
}
公共字符串消息{get;set;}
}
私有EventHandler\u验证失败;
公共事件事件处理程序验证失败
{
添加{u validationFailed+=value;}
删除{u validationFailed-=value;}
}
受保护的void OnValidationFailed(ValidationFailedEventArgs e)
{
如果(_validationFailed!=null)
_验证失败(此,e);
}
私有无效验证器()
{
如果(!有效)
{
ValidationFailedEventArgs参数=
新验证失败事件目标(“您的邮件”);
OnValidationFailed(args);
}
}
//以您的主要形式:
userControl.ValidationFailed+=
新事件处理程序(userControl_ValidationFailed);
// ...
私有void userControl_验证失败(对象发送方,
验证失败事件(e)
{
statusBar.Text=e.Message;
}
要处理验证,请执行以下操作之一:
- 使用用户控件内的方法进行验证
- 让您的用户控件具有一个可以处理验证的属性(例如,
)(这将允许您拥有一个包含一组可分配给控件的验证器的类)ValidationHandler
公共委托无效验证程序(…)
public Validator ValidationHandler{get;set;}
- 让您的用户控件生成验证请求(例如,
)ValidationRequested
请求的公共事件事件处理程序验证
- 使用相关方可以订阅的许可证(例如,
)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;
}
//在用户控件中
公共类验证失败EventTargets:EventArgs
{
公共验证失败事件目标(字符串消息)
{
this.Message=消息;
}
公共字符串消息{get;set;}
}
私有EventHandler\u验证失败;
公共事件事件处理程序验证失败
{
添加{u validationFailed+=value;}
删除{u validationFailed-=value;}
}
受保护的void OnValidationFailed(ValidationFailedEventArgs e)
{
如果(_validationFailed!=null)
_验证失败(此,e);
}
私有无效验证器()
{
如果(!有效)
{
ValidationFailedEventArgs参数=
新验证失败事件目标(“您的邮件”);
OnValidationFailed(args);
}
}
//以您的主要形式:
userControl.ValidationFailed+=
新事件处理程序(userControl_ValidationFailed);
// ...
私有void userControl_验证失败(对象发送方,
验证失败事件(e)
{
statusBar.Text=e.Message;
}
如果您在UserControl中执行验证,则可以让它提供公共ValidationFailed事件,并将消息包含在EventArgs中。然后,父控件可以订阅ValidationFailed事件并更新状态栏。如果您在UserControl中执行验证,则可以让它提供公共ValidationFailed事件并将消息包含在