【问题标题】:Enter only numbers 1 or 2仅输入数字 1 或 2
【发布时间】:2019-05-14 09:52:59
【问题描述】:

如何才能使只有数字 1 或 2 可以输入到文本框中?您还可以使用 Backspace 键。文本框字符的最大长度为 1。 我知道如何只输入数字:

char number = e.KeyChar;
if (!Char.IsDigit(number) && number != 8)
{
e.Handled = true;
}

【问题讨论】:

    标签: c# winforms textbox


    【解决方案1】:

    您只需要使用正则表达式,您就可以使用表达式检查任何输入。

    我认为你应该访问这个问题: Only allow specific characters in textbox

    【讨论】:

      【解决方案2】:
      char number = e.KeyChar;
      if (number != '1' && number != '2' && number != '\b')
      {
          e.Handled = true;
      }
      

      或者只是

      e.Handled = e.KeyChar != '1' && e.KeyChar != '2' && e.KeyChar != '\b';
      

      或者为了更多的表现力

      private static readonly char[] allowedChars = { '1', '2', '\b' };
      // ...
      e.Handled = !allowedChars.Contains(e.KeyChar);
      

      【讨论】:

        【解决方案3】:

        我会使用 NumericUpDown 控件而不是 TextBox。在那里您可以将最小值设置为 1,最大值设置为 2,并且您的用户可以输入数字或使用箭头键来增加/减少。

        如果您必须使用 TextBox,则将其 MaxLength 属性设置为 1,并添加 KeyDown 事件和处理程序。在处理程序中你可以这样做:

        if(!(e.KeyCode == Keys.D1 || e.KeyCode == Keys.D2 || E.KeyCode == Keys.Delete)) 
        {
            // Of course, you can add even more keys up there. For example, you might add Keys.Numpad1 etc...
            e.handled = true;
        }
        

        所以,对于 TextBox,您基本上已经做了正确的事情。

        【讨论】:

          【解决方案4】:

          使用SuppressKeyPress 属性

              private void textBox1_KeyDown(object sender, KeyEventArgs e)
              {
                  /*
                   * 8:   backspace
                   * 49:  1
                   * 50:  2
                   */
          
                  int[] validKeys = {8, 49, 50};
                  if (!validKeys.Contains(e.KeyValue))
                      e.SuppressKeyPress = true;
          
              }
          

          【讨论】:

            【解决方案5】:

            我假设您需要的只是文本框的 TextChanged 事件中的以下内容?

            if (textbox.text != "1" && textbox.text != "2")
            {
                textbox.text = string.empty;
            }
            

            我不确定您的问题中 number != 8 的用途是什么?

            【讨论】:

            • 这是一种不好的做法
            • @Roberto - 所以在不说 为什么 这是不好的做法的情况下指出一些不好的做法。尽管当任何实际回答问题的答案都是不好的做法时,这一切似乎都没有实际意义 - TextBox 不适合来自用户的布尔输入。肯定是复选框或单选按钮 - 可能是 NumericUpDown,但即使这样也不合适。
            猜你喜欢
            • 2016-02-26
            • 2015-07-29
            • 1970-01-01
            • 1970-01-01
            • 2023-03-17
            • 1970-01-01
            • 2013-12-24
            • 2015-07-17
            • 1970-01-01
            相关资源
            最近更新 更多