2011-07-18 45 views
3

我試圖禁用所有的擊鍵輸入到文本框,除了以下:C# - 禁用鍵盤輸入進入一個文本框

0 1 2 3 4 5 6 7 8 9。

現在我有以下的代碼,但它只是檢查是否一個字母被輸入了作爲第一個值(更不用提(除了數字和「」應該被禁用,因此所有鍵)它真的馬虎):

private void yDisplacementTextBox_TextChanged(object sender, EventArgs e) 
    { 
     if (yDisplacementTextBox.Text.ToUpper() == "A" || yDisplacementTextBox.Text.ToUpper() == "B" || yDisplacementTextBox.Text.ToUpper() == "C" || 
      yDisplacementTextBox.Text.ToUpper() == "D" || yDisplacementTextBox.Text.ToUpper() == "E" || yDisplacementTextBox.Text.ToUpper() == "F" || 
      yDisplacementTextBox.Text.ToUpper() == "G" || yDisplacementTextBox.Text.ToUpper() == "H" || yDisplacementTextBox.Text.ToUpper() == "I" || 
      yDisplacementTextBox.Text.ToUpper() == "J" || yDisplacementTextBox.Text.ToUpper() == "K" || yDisplacementTextBox.Text.ToUpper() == "L" || 
      yDisplacementTextBox.Text.ToUpper() == "M" || yDisplacementTextBox.Text.ToUpper() == "N" || yDisplacementTextBox.Text.ToUpper() == "O" || 
      yDisplacementTextBox.Text.ToUpper() == "P" || yDisplacementTextBox.Text.ToUpper() == "Q" || yDisplacementTextBox.Text.ToUpper() == "R" || 
      yDisplacementTextBox.Text.ToUpper() == "S" || yDisplacementTextBox.Text.ToUpper() == "T" || yDisplacementTextBox.Text.ToUpper() == "U" || 
      yDisplacementTextBox.Text.ToUpper() == "V" || yDisplacementTextBox.Text.ToUpper() == "W" || yDisplacementTextBox.Text.ToUpper() == "X" || 
      yDisplacementTextBox.Text.ToUpper() == "Y" || yDisplacementTextBox.Text.ToUpper() == "Z") 
     { 
      MessageBox.Show("Please enter a numeric value for the Y Displacement.", "Y Displacement: Numbers Only Error", 
         MessageBoxButtons.OK, MessageBoxIcon.Warning); 
     } 
    } 

反正有這麼按壓時,所有的鍵盤(除了數字和期限上的按鈕鍵)不登記(或禁用)的實際密鑰的值和輸入什麼都沒有?

+0

作爲第一個建議,你的邏輯就會簡單得多找你想允許的字母,而忽略(或提示)任何ISN」 t'0-9'或'.'。 –

+0

看看[在這篇文章](http://stackoverflow.com/questions/6721274/how-can-i-create-a-textbox-which-only-accepts-certain-integer-values/6721300#6721300) 。 希望它有幫助。 –

+0

這是winforms還是wpf?您應該刪除'input'標籤,然後添加其中一個標籤。 –

回答

5

使用textBox1.KeyPress += textBox1_KeyPress

此代碼只允許數字和.和退格。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if ((e.KeyChar > (char)Keys.D9 || e.KeyChar < (char)Keys.D0) && e.KeyChar != (char)Keys.Back && e.KeyChar != '.') 
    { 
     e.Handled = true; 
    } 
    //Edit: Alternative 
    if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back && e.KeyChar != '.') 
    { 
     e.Handled = true; 
    } 
} 
+1

'Char.IsNumber()'在這裏很有用 –

+0

@Rubens:你說得對,我補充說,作爲替代,謝謝。 –

1

有兩種方法,你可以嘗試的方法是:

  1. 等待用戶完成輸入數據,然後使用double.TryParse(),以確保它是一個有效的數字。

  2. 使用文本框的KeyPress事件驗證數據,因爲每個鍵被按下。

0

到這裏看看:Simple Numeric TextBox

編輯:正如其他的答案解釋做處理的OnKeyPress /的onkeydown事件是什麼,本文將演示如何應對其他方案,如粘貼文本,所以我會保留這個答案。

0

許多第三方控制庫也有這種內置的功能,如果你發現自己使用其中之一。

0

最好的做法是允許輸入任何內容,但通過錯誤提供程序通知錯誤驗證(驗證事件和double.TryParse())。

但是如果你堅持,一定要把'。'替換掉。用系統的小數點分隔符。如果你不是假設所有的數值都是英文的,你可以很容易地進入一個不能輸入小數值的問題。

例如,我在克羅地亞,在這裏我們必須鍵入一個逗號(,)。在一些伊斯蘭國家,我不記得小數點分隔符是散列(#)。

因此要小心本地化問題。

0

下面的代碼將抑制除數字,退格和小數點以外的所有數字。它也只允許一個十進制數字輸入。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if ((e.KeyChar > (char)Keys.D9 || e.KeyChar < (char)Keys.D0) && e.KeyChar != (char)Keys.Back && e.KeyChar != '.') 
    { 
     e.Handled = true; 
     return; 
    } 
    if(e.KeyChar == '.' && textBox1.Text.Contains('.')) 
    { 
     e.Handled = true; 
    } 
} 
0

這也可以用來

if (!Char.IsDigit(e.KeyChar) && e.KeyChar != '\b' && e.KeyChar != '.'){ 
      e.Handled = true;}