具有用户输入验证的KeyDown事件

时间:2014-01-28 08:43:53

标签: c# winforms

在下面的代码中,我试图只获得十进制值。但是文本字段输入来自不同的字符串。需要验证数字和退格,删除密钥

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;
}

如果我在文本框中输入1,iam在文本框中得到ascii值149,因为它在文本框中附加了49 - ascii值为1.你能建议如何解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

请说明您的问题清除。假设您要限制用户的输入 为了让用户只输入数字(&#39; 0&#39; ...&#39; 9&#39;)你可以这样做:

  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;
  }

P.S。但请注意,用户可以粘贴不正确的内容,以防止您使用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 = "";
  }
}
相关问题