2012-10-08 13 views
0

我有一个自定义控件,它在加载表单时获取焦点。它使用验证事件来处理它被留空或输入无效数据。表单关闭时取消自定义UserControl上的验证事件

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

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

回答

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