在表单关闭时取消自定义UserControl上的验证事件

时间:2012-10-08 23:05:00

标签: c# winforms events event-handling

我有一个自定义控件,可以在加载表单时获得焦点。它使用验证事件来处理它被留空或输入无效数据。

我的问题是,当用户加载表单时,只需关闭它,它就会经历验证过程并显示错误,因为它是空的。

在BaseForm(:Form)上我们覆盖了WndProc方法并在表单上设置了一个标志,表示它正在关闭,现在在验证事件处理程序中我可以获取父表单并取消表单中的返回表单正在关闭。

我想要做的是对对象执行此检查,以便它影响所有现有实例,并在窗体关闭时取消验证事件。我只是无法取消活动。

这是UserControl代码的shell。

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
        }
    }
}

1 个答案:

答案 0 :(得分:0)

覆盖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
        }
    }
}