2012-10-08 57 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 
     } 
    } 
}