2015-09-12 80 views
0

我有一個文本框應該只包含數字。該檢查在離開事件中進行。如果文本框包含字符而不是數字,它會提示用戶檢查其輸入,然後重試,同時保持焦點放在文本框上。C#:如何取消以前聚焦的文本框的焦點?

問題是,如果用戶按下取消,文本框仍然保持聚焦狀態,並且無法在表單中的其他位置單擊。如果他刪除了文本框的內容,也會發生同樣的情況。我究竟做錯了什麼?希望得到一些幫助!提前致謝!

private void whateverTextBox_Leave(object sender, EventArgs e) 
    { 
     //checks to see if the text box is blank or not. if not blank the if happens 
     if (whateverTextbox.Text != String.Empty) 
     { 
      double parsedValue; 

      //checks to see if the value inside the checkbox is a number or not, if not a number the if happens 
      if (!double.TryParse(whateverTextbox.Text, out parsedValue)) 
      { 
       DialogResult reply = MessageBox.Show("Numbers only!" + "\n" + "Press ok to try again or Cancel to abort the operation", "Warning!", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation); 

       //if the user presses ok, textbox gets erased, gets to try again 
       if (reply == DialogResult.OK) 
       { 
        whateverTextbox.Clear(); 
        whateverTextbox.Focus(); 
       } 

       //if the user presses cancel, the input operation will be aborted 
       else if (reply == DialogResult.Cancel) 
       { 
        whateverTextbox.Clear(); 

        //whateverTextbox.Text = String.Empty; 

        //nextTextBox.Focus(); 
       } 
      } 
     } 
    } 
+0

使用全局變量存儲'LastControl' – Abdullah

+0

我知道這是當故障排除的標準問卷,但這裏有雲:你已經把一個破發點在離開事件中,看到一旦你退出會發生什麼?是否有任何異常會導致控制停止?如果用戶點擊OK,會發生什麼?你說當用戶刪除TextBox的內容時會發生同樣的情況,他們是否會離開控件,或者即使當TextBox保持焦點時它也會停止,但現在長度爲0?您的表單和TextBox正在觸發哪些其他事件?也許其中一個卡在無限循環或什麼東西? –

回答

1

爲什麼不只是做這樣的事情:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back) 
    { 
     e.Handled = true; 
     MessageBox.Show("Numbers only!" + "\n" + "Press ok to try again or Cancel to abort the operation", "Warning!"); 
    } 
} 
+0

感謝您的建議!我想我真的很累,並沒有想過......但是,我想知道以前代碼中的問題在哪裏。 – cookiemonster