2014-06-19 31 views
1

我試圖在文本框中使用此自定義方法進行用戶輸入驗證。但是我在這裏看到了一些缺失,因爲現在我無法將(焦點)移動到窗體中的下一個文本框!使用TextBox_Validating事件進行用戶輸入驗證

private void textBox_Validating(object sender, CancelEventArgs e) 
{ 
    TextBox currenttb = (TextBox)sender; 
    if (currenttb.Text == "") 
    { 
     MessageBox.Show(string.Format("Empty field {0 }", currenttb.Name.Substring(3))); 
     e.Cancel = false; 
    } 

    else 
    { 
     e.Cancel = true; 
    } 
} 

添加處理程序與形式構造foreach循環的文本框:

foreach(TextBox tb in this.Controls.OfType<TextBox>().Where(x => x.CausesValidation == true)) 
{ 
    tb.Validating += textBox_Validating; 
} 
+0

這是預期的行爲 - [Control.Validating事件](http://msdn.microsoft.com/en-us/library/system .windows.forms.control.validating%28v = vs.110%29.aspx) – Anuraj

+0

'if'中有一個錯誤。應該是這樣的> if(currenttb.Text ==「」) { MessageBox.Show(string.Format(「Empty field {0}」,currenttb.Name.Substring(3))); e.Cancel = true; } – CAD

+0

如果您設置e.Cancel = true,表示驗證失敗,則不允許更改焦點 – Anuraj

回答

1

由於answerd這裏失去焦點C# Validating input for textbox on winforms其預期行爲: -

說明

有很多方法來驗證你的TextBox。您可以在每個 按鍵上,稍後或驗證事件中執行此操作。

如果TextBox失去焦點,驗證事件會被觸發, 示例點擊其他控件。如果你的設置e.Cancel = true,TextBox不會失去焦點。

MSDN - Control.Validating事件當您使用 鍵盤(TAB,SHIFT + TAB,等等),通過調用選擇或 SelectNextControl方法,或通過設置 ContainerControl.ActiveControl屬性更改焦點以目前的形式,集中 事件發生時按以下順序

輸入

的GotFocus

離開

驗證

驗證

引發LostFocus

當您通過使用鼠標或通過調用焦點 方法改變焦點,焦點事件發生的順序如下:

輸入

GotFocus

LostFocus

離開

驗證

驗證