C# 如何生成只接受数字的文本框?

C# 如何生成只接受数字的文本框?,c#,.net,winforms,textbox,C#,.net,Winforms,Textbox,使用以下内容生成文本框: 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

使用以下内容生成文本框:

 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);  
        }
    }
我的问题:1。如何设置生成只接受数字的文本框?
2。我只想要两个数字(从0-99
string pattern=@“^[0-9]{2}?$”;
)。或者有什么不同的方法可以做到这一点。

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


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

textBox1\u键是否是处理Texbox输入验证的方法

如果是-在添加文本框之前,添加事件参照:

tb.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
UPD:

另一个选项(这是肮脏的方式):

在this.Controls.Add(tb)之前

private void Textbox1\u按键(对象发送器,按键事件参数e)
{
if(!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(),“\\d+”)
e、 已处理=正确;
}
私有无效文本框1\u按键(对象发送器,按键事件参数e)
{
if(char.IsNumber(e.KeyChar))
{
if(Regex.IsMatch(txtstockbunded.Text,“\\D+”)
{
e、 已处理=正确;
}
}
其他的
{
e、 已处理=e.KeyChar!=(char)Keys.Back;
}
}
公共类NumericTextBox:TextBox
{
按键时受保护的覆盖无效(按键事件参数e)
{
if(!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(),“\\d+”)
e、 已处理=正确;
按键(e);
}
}
公共无效添加文本框(整数)
{
for(int i=0;i
这是最好的选择。现在Winforms与WPF相比几乎是唯一的优势。这是一种痛苦的方式,我们在WPF中这样做是因为没有其他选择。textBox1_KeyPress仅适用于textBox1(这是唯一的考试)。生成的tb未连接到按键。如何将按键添加到tb?@Janolmayti是的,有。您只需使用lmbda表达式:@Janolmayti我已经编辑了答案,添加了lambda表达式示例。@Janolmayti喜欢:
if(Regex.IsMatch(((TextBox)sender.Text,@“^[0-9]{2}?$”
Cool!这对第二个问题有效。谢谢仍然想知道问题1创建用户控件拖放文本框并为kep press创建文本框事件处理程序并将其放入表单中…这将在表单中创建自定义文本框…@StackOverflovUser尝试您的方法,但当我添加
@“^[0-9]{2}?”时
我无法在文本框中插入任何内容。我强烈建议您首先开始学习正则表达式。@StackOverflovUser呵呵,我会的!
tb.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
    tb.KeyPress += (sender, e)=>{ 
 const char Delete = (char)8;
        e.Handled = !Char.IsDigit(e.KeyChar) && e.KeyChar != Delete;
    };
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);  
        }
    }