【问题标题】:How do I generate a textbox that only accepts numbers?如何生成只接受数字的文本框?
【发布时间】:2012-02-19 11:31:43
【问题描述】:

生成文本框:

 public void addTextBox(int number)
    {
        for (int i = 0; i < number; i++)
        {
            string name = "tb_" + (i + 1).ToString("00");
            tb = new TextBox();
            tb.Name = name;
            tb.Location = new Point(x, y);
            tb.Width = 20;
            x += 30;

            this.Controls.Add(tb);  
        }
    }

仅接受数字的手动格式文本框:

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        const char Delete = (char)8;
        e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != Delete;
    }

我的问题:1.如何设置生成只接受数字的texbox? 2. 我只想要两个数字(从 0 到 99 string pattern = @"^[0-9]{2}?$";)。或者有什么不同的方法来做到这一点。

【问题讨论】:

    标签: c# .net winforms textbox


    【解决方案1】:

    使用NumericUpDown 类怎么样? (这可能是最简单的。)您可以设置最大值和最小值。您也可以仅将其设置为 INTEGER。

    LINK HERE

    【讨论】:

      【解决方案2】:

      使用MaskedTextBox 并将Mask 属性设置为00。

      【讨论】:

      • 这绝对是要走的路。这些天,Winforms 几乎是 WPF 的唯一优势。
      【解决方案3】:

      textBox1_KeyPress 是处理Texbox 输入验证的方法吗?

      如果是这样 - 就在添加 TextBox 之前,添加一个事件引用:

      tb.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
      

      UPD:

      另一种选择(这是肮脏的方式):

          tb.KeyPress += (sender, e)=>{ 
       const char Delete = (char)8;
              e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != Delete;
          };
      

      在 this.Controls.Add(tb); 之前

      【讨论】:

      • 那是痛苦的方式,我们在WPF中这样做,因为没有其他选择。
      • textBox1_KeyPress 仅适用于 textBox1(它只是考试)。生成的 tb 未连接到 KeyPress。如何将 KeyPress 添加到 tb?
      • @JanOlMajti 是的。您可以简单地使用 lmbda 表达式:
      • @JanOlMajti 我已经编辑了答案,添加了 lambda 表达式示例。
      • @JanOlMajti 喜欢:if (Regex.IsMatch(((TextBox)sender).Text, @"^[0-9]{2}?$"))
      【解决方案4】:
      private void Textbox1_KeyPress(object sender, KeyPressEventArgs e)
      {
         if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), "\\d+"))
         e.Handled = true;
      }
      
      private void textbox1_KeyPress(object sender, KeyPressEventArgs e)
      {
          if (char.IsNumber(e.KeyChar))
          {
              if (Regex.IsMatch(txtStockBought.Text, "\\D+"))
              {
                  e.Handled = true;
              }
          }
          else
          {
              e.Handled = e.KeyChar != (char)Keys.Back;
          }
      }
      
      
      public class NumericTextBox : TextBox
      {
          protected override void OnKeyPress(KeyPressEventArgs e)
          {
              if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), "\\d+"))
              e.Handled = true;
              base.OnKeyPress(e);
          }
      }
      
      
      
      public void addTextBox(int number)
          {
              for (int i = 0; i < number; i++)
              {
                  string name = "tb_" + (i + 1).ToString("00");
                  tb = new NumericTextBox();
                  tb.Name = name;
                  tb.Location = new Point(x, y);
                  tb.Width = 20;
                  x += 30;
      
                  this.Controls.Add(tb);  
              }
          }
      

      【讨论】:

      • 酷!这适用于问题 NO 2。 谢谢。仍然想知道问题 NO 1
      • 创建一个用户控件拖放一个文本框并为kep press创建文本框事件处理程序并将其带入您的表单......这将在您的表单中创建一个自定义文本框......
      • @StackOverflovUser 尝试您的方法,但是当我添加 @"^[0-9]{2}?$" 时,我无法在文本框中插入任何内容。
      • 我强烈建议你应该先开始学习正则表达式。
      • @StackOverflovUser 呵呵,我会的!
      猜你喜欢
      • 2022-06-28
      • 2011-06-15
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2013-12-05
      • 2010-10-21
      • 2010-10-02
      • 2018-12-28
      相关资源
      最近更新 更多