我有一个自定义控件,它在加载表单时获得焦点。它在其上使用验证事件来处理它为空或输入了无效数据。
我的问题是,当用户加载表单,然后关闭它时,它会经历验证过程并显示错误,因为它是空的。
在BaseForm(:Form)上,我们覆盖了WndProc方法,并在表单上设置了一个标志,表示它正在关闭,现在在验证事件处理程序中,如果表单正在关闭,我可以获取父表单并取消该方法的返回。
我想做的是对对象执行此检查,以便它影响所有现有实例,并在表单关闭时取消验证事件。我就是无法取消活动。
这是UserControl代码的外壳。
public class SearchControl : UserControl
{
public SearchControl()
{
Validating += OnControlValitading;
}
public void OnControlValitading(object sender, CancelEventArgs e)
{
BaseForm frm = FindForm() as BaseForm;
if(frm != null && frm.IsClosing)
{
e.Cancel = true;
//TODO Cancel validation event on all objects
}
}
}
覆盖OnValidating并使用CancelEventArgs:
public class SearchControl : UserControl
{
protected override void OnValidating(CancelEventArgs e)
{
BaseForm frm = FindForm() as BaseForm;
if (frm != null && frm.IsClosing)
{
e.Cancel = true;
//TODO Cancel validation event on all objects
}
}
}