KeyPress 事件给出了错误的值

KeyPress Event gives wrong value

我做了一个 KeyPress 事件并希望只允许双精度值(或只允许数字和逗号)所以我尝试了这个:

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

但不知何故,他在 "Decimal" 上遇到了问题。我正在使用德语键盘,当我尝试输入逗号时,他什么也没做。当我按下 "n" 键时,他写了这封信。这里有什么问题以及如何解决?

您可以像这样使用 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;
  }
}