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

I want make all textboxes on my form to accept only numbers with as little code as possible - c#

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

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

文本框也位于面板内,以防万一。

创建派生的 DigitsOnly TextBox,实现方法,并用它代替 TextBox。

如果您使用的是 Windows 表单而不是 WPF,则可以使用 MaskedTextBox.

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

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

Create a derrived DigitsOnlyTextBox, with the method implemented, and use it in place of 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),您可以在 Form 的设计器视图中轻松完成所有这些操作:

默认处理程序

复制定义处理程序