我想让我的表单上的所有文本框只接受尽可能少的代码 - c#

时间:2015-05-06 17:50:54

标签: c# visual-studio-2010 textbox keypress

我正在制作一个相对简单的软件,它有很多文本框,我想要一种方法只允许表单中所有文本框中的数字,希望是一段代码。我目前使用以下代码仅允许一个文本框的数字,但这意味着为每个文本框重复这些行。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
    {
        e.Handled = true;
    }
}

文本框也在面板中,这会产生影响。

3 个答案:

答案 0 :(得分:2)

使用实现的方法创建一个开源的DigitsOnlyTextBox,并使用它代替TextBoxes。

答案 1 :(得分:1)

正如Darek所说,一个可行的选择是:

  

使用实现的方法创建一个开源的DigitsOnlyTextBox,并使用它代替TextBoxes

第二个选项是简单地将每个TextBox指向同一个事件处理程序。例如,在Form.Designer.cs

this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBoxNumericOnly_KeyPress);
this.textBox2.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBoxNumericOnly_KeyPress);
this.textBox3.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBoxNumericOnly_KeyPress);
...

然后你的处理程序:

private void textBoxNumericOnly_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
    {
        e.Handled = true;
    }
}

假设您正在使用Visual Studios并且您已经第一次创建了事件处理程序(对于textBox1),您可以在{{1的设计器视图中轻松完成此操作}}:

默认处理程序 Adding default event handler in VS

复制Def Handler Adding copied event handler in VS

答案 2 :(得分:0)

如果您使用的是Windows窗体而非WPF,则可以使用MaskedTextBox

不确定您是否可以在WPF中复制该功能,但从未使用过它。