2014-01-28 47 views
2

在下面的代碼中,我試圖只獲取十進制值。但是文本字段輸入來自不同的字符串。需要驗證對數字和退格,如果我在文本框中輸入1刪除鍵KeyDown事件與用戶輸入驗證

if ((e.KeyValue >= 48 && e.KeyValue <= 57) || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) && (textBox1.Text.Length < textBox1.MaxLength)) 
{ 
    if (e.KeyCode != Keys.Delete && e.KeyCode != Keys.Back) 
    { 
     if (e.KeyValue >= 48 && e.KeyValue <= 57) 
     { 
      enteredNumber = e.KeyData.ToString(); 
     } 
     else 
     { 
      enteredNumber = e.KeyData.ToString().Substring(0, 1); 
     } 
    } 
    textBox1.Text = textBox1.Text + enteredNumber; 
} 

,IAM獲得在文本框中輸入字符的ASCII值149,因爲其附加49 - 在文本框中的1 ASCII值。你能建議如何解決這個問題嗎?

+0

你爲什麼不使用e.KeyChar? – User2012384

+0

你期待的結果是什麼?輸入兩位數後輸入 – Plue

+0

,需要用小數點分隔符更新。 KeyChar不可用。 – curiousDev

回答

3

請說明您的問題明確。假設,要限制,以便讓用戶輸入數字用戶的輸入 只(「0」 ..「9」),你可以做這樣的事情:

private void myTextbox_KeyPress(object sender, KeyPressEventArgs e) { 
    if (Char.IsDigit(e.KeyChar)) 
     return; 
    else if (e.KeyChar < ' ') // <- I suggest that you allow user to press ESC, TAB etc. 
     return; 

    // Other keys are forbidden 
    e.Handled = true; 
    } 

附:但是請記住,用戶可以粘貼不正確的數據,以防止你可以使用TextChanged事件:

private void myTextbox_TextChanged(object sender, EventArgs e) { 
    if (!Regex.IsMatch(myTextbox.Text, @"^\d*$")) { 
    // User's trying to PASTE something wrong from the Clipboard 
    // Let's, for instance, remove his/her input in that case: 
    myTextbox.Text = ""; 
    } 
} 
+0

需要檢查數字並刪除退格鍵。 – curiousDev

+0

@rajalakshmi:在「else if(e.KeyChar <'')」行,例如BackSpace就我所記得的8而言,''(空格)是32; 'delete'完全不會生成KeyPress事件 –