2013-07-01 113 views
5

我的問題是,我在Leave事件中驗證了TextBox,我檢查此TextBox有什麼。如果此TextBox中的文本與0相同,則出現MessageBox,但如果表單正在關閉並且焦點位於此TextBox中,則會出現MessageBox,因爲TextBox沒有任何內容。如何防止在窗體關閉時發生控件觸發事件

如何在表單關閉時避免Leave事件中的驗證?

回答

6

您將需要覆蓋窗體上的OnFormClosing方法並設置一個標誌,讓您知道表單正在關閉。然後,在驗證時,首先檢查該標誌。

一定調用base前設置標誌

protected override void OnFormClosing(FormClosingEventArgs e) 
{ 
    _isClosing = true; 

    base.OnFormClosing(e); 
} 
+0

我想試試這個,但我如何分配這個事件,覆蓋,_isClosing是我需要驗證的單位? –

+0

@JoséGordilloLópez,請參閱我的更新(我將'virtual'改爲'override')。此外,'_isClosing'是類變量'private bool _isClosing;',您將設置爲讓表單知道它正在關閉。然後在'Leave'事件中,你會這樣做,'if(_isClosing){return; }'取消驗證。 –

+0

感謝,這項工作非常好,對於其他用戶,謝謝 –

4

一種方法是刪除文本框引發的事件。我不確定你如何驗證,但你可以嘗試在FormClosing事件中將Enabled屬性設置爲false。

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
{   
    myTextBox.Enabled = false; 
} 

或刪除Leave事件處理程序

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
{  
    myTextBox.Leave -= myTextBox_Leave; 
} 
1

使用文本框的「驗證」事件來實現的,而不是「離開」事件這一點。

這將確保您的代碼在表單關閉前執行,並且應該實現您需要的內容。

相關問題