2017-03-02 24 views
0

我已經爲用戶答案的​​文本框設置了一個問題,一旦他們給出答案,我希望文本框被禁用,並出現一個標籤來表示正確或不正確。但目前只能輸入一個數字,然後出現正確或不正確的標籤。正如你在下面看到的答案是10.因此,只要輸入1,就會顯示不正確,並且文本框被禁用。驗證文本框以接受多個數字

private void txt_2a_TextChanged(object sender, EventArgs e) 
    { 
     if (txt_2a.Text == "10") 
     { 
      lblcorrectQ2_1.Visible = true; 
      txt_2a.Enabled = false; 
     } 
     else 
     { 
      lblincorrectQ2_1.Visible = true; 
      txt_2a.Enabled = false; 
     } 

    } 
+0

註冊您的處理程序,以一個'blur'事件。 – user3682091

+0

然後使用驗證事件,而不是TextChanged事件。這將需要用戶離開文本框才能觸發。 – LarsTech

+0

謝謝LarsTech,現在完美! – ChromedCm

回答

0

如果不wan't用戶不得不離開盒子,你可以實現,其中,執行TextChanged事件在第一時間創建Timer的機制,並告訴它執行時間到了(例如1秒)後的動作。

如果發生另一個TextChanged事件,請檢查Timer是否已創建。如果有,則您致電timer.Stop(); timer.Start();重置計時器。當用戶最終停止鍵入1秒時,則可以進行驗證。

請注意,由於驗證正在修改UI,並且Timer在另一個線程上運行,因此您可能需要將線程封送回UI線程。這可以通過做這樣的事情https://stackoverflow.com/a/661706/193282或本https://stackoverflow.com/a/661662/193282

1

爲什麼不使用簡單地做ENTER作爲確認該用戶打完他/她的回答。您可以使用KeyDown事件捕捉輸入,如果ENTER被擊中驗證輸入:

private void txt_2a_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     validateAnswer(txt_2a.Text); 
    } 
} 

private void validateAnswer(string text) 
{ 
    if (text == "10") 
    { 
     lblcorrectQ2_1.Visible = true; 
    } 
    else 
    { 
     lblincorrectQ2_1.Visible = true; 
    } 

    txt_2a.Enabled = false; 
}