2014-01-28 42 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事件 –