KeyPress事件提供错误的值

时间:2015-03-04 06:48:00

标签: c# decimal keypress

我制作了一个KeyPress事件,并且只想允许Double值(或只是数字和逗号),所以我尝试了这个:

 e.Handled = !(char.IsNumber(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == (char)Keys.Decimal);

但不知怎的,他有“十进制”的问题。我正在使用德语键盘,当我尝试输入逗号时,他什么也没做。当我按下“n”键时,他写了这封信。这里有什么问题以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以使用keyPress事件限制输入,如下所示:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
   char c= e.KeyChar;
   if (!char.IsDigit(c) && !char.IsControl(c))
   {
      e.Handled = true;
    }
}

如果我们想要扩展我们的限制条件以接受某个字符(例如,

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
  char c= e.KeyChar;
  if (!char.IsDigit(c) && !char.IsControl(c) && c!=',')
  {
    e.Handled = true;
  }
}

为避免使用多个逗号222,34545,454,我们可以解决此问题:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
  char c= e.KeyChar;
  bool comma= textBox1.Text.Contains(','); //true in case comma already inserted

  // accepts only digits, controls and comma
  if (!char.IsDigit(c) && !char.IsControl(c) && c!=',')
  {
    e.Handled = true;
    return;
  }


  // whenever a comma is inserted we check if we already have one
  if (c == ',' && comma)
  {
    e.Handled = true;
  }
}