【问题标题】:how to make textbox who only allow integer value?如何制作只允许整数值的文本框?
【发布时间】:2011-03-08 12:53:56
【问题描述】:

我想在我的 wpf 应用程序中创建一个仅接受整数值的文本框。如果有人在 [a-z] 之间键入字符,文本框将拒绝它。因此它不会显示在文本框中

【问题讨论】:

标签: c# wpf


【解决方案1】:

您可以处理 PreviewTextInput 事件:

private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
  // Filter out non-digit text input
  foreach (char c in e.Text) 
    if (!Char.IsDigit(c)) 
    {
      e.Handled = true;
      break;
    }
}

【讨论】:

    【解决方案2】:

    在 WPF 中,您可以像这样处理KeyDown 事件:

    private void MyTextBox_KeyDown(object sender, KeyDownEventArgs e)
    {
        e.Handled = true;
    }
    

    【讨论】:

    • 这只会阻止输入文本,但不会阻止从剪贴板粘贴。
    • 复制/粘贴无论如何都需要特殊的后验证处理,但在这种情况下,做一个预过滤器的想法可能更好。然后可以将其与后验证相结合。我宁愿使用 PreviewTextInput 事件而不是 KeyDown 事件
    【解决方案3】:

    您可以添加TextChanged 事件的句柄并查看输入的内容(每次都需要检查所有文本以防止从剪贴板粘贴字母)。

    CodeProject 上创建可屏蔽编辑框也是一个很好的例子。

    【讨论】:

      【解决方案4】:

      这个简单的代码 sn-p 应该可以解决问题。您可能还想检查溢出(数字太大)

      private void IntegerTextBox_TextChanged(object sender, EventArgs e)
      {
          for (int i = 0; i < Text.Length; i++)
          {
              int c = Text[i];
              if (c < '0' || c > '9')
              {
                 Text = Text.Remove(i, 1);
               }
          }
      }
      

      【讨论】:

      • 这不会阻止用户输入“非整数”,它只是在输入后将其删除。 Jogy 使用 previewTextInput 方法的解决方案似乎更好。您的解决方案可以用作后期验证(复制/粘贴的情况)
      • 是的,您是对的,有时您会在使用此代码时看到文本出现的地方“闪烁”然后消失。我想最好的解决方案是两者的结合。
      【解决方案5】:

      将其绑定到整数属性。 WPF 将自己进行验证,没有任何额外的麻烦。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-23
        • 1970-01-01
        • 2023-02-24
        • 2013-12-19
        • 2010-10-24
        相关资源
        最近更新 更多