1

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

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

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

1 回答 1

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
        }
    }
}
于 2012-10-08T23:22:45.903 回答