C# 将一个事件应用于userform中的所有文本框

C# 将一个事件应用于userform中的所有文本框,c#,events,C#,Events,这个话题的一部分已经被讨论过了,但我对C#还不熟悉,我还不太明白 我得到了一个函数,它强制用户输入十进制数 public void onlynumwithsinglepoint(object sender, KeyPressEventArgs e) { if (!(char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == '.')) { e.Handled = true; } TextB

这个话题的一部分已经被讨论过了,但我对C#还不熟悉,我还不太明白

我得到了一个函数,它强制用户输入十进制数

public void onlynumwithsinglepoint(object sender, KeyPressEventArgs e)
{
    if (!(char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == '.'))
    { e.Handled = true; }
    TextBox txtDecimal = sender as TextBox;
    if (e.KeyChar == '.' && txtDecimal.Text.Contains("."))
    {
        e.Handled = true;
    }
}
当有按键时,我需要将该函数应用于名为ConcreteFilled Column()的表单中的每个文本框。我知道有一种使用“for each”语句的方法。。。但是我想不出来。现在,我所有的文本框都使用单独的事件,如下所示:

private void columnLengthTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    onlynumwithsinglepoint(sender, e);
}
就这么简单:

public Form1() //your form constructor
{
    InitializeComponent();
    textbox1.OnKeyDown += onlynumwithsinglepoint; //or whatever the event is
    textbox2.OnKeyDown += onlynumwithsinglepoint; 
    textbox3.OnKeyDown += onlynumwithsinglepoint;
}
至于递归,如果您使用的是WinForms,我想类似的方法是可行的:

public Form1() //your form constructor
{
    InitializeComponent();

    foreach(Button b in this.Controls.OfType<Button>())
    {
        b.OnkeyDown += onlynumwithsinglepoint; //or whatever the event is
    }
}
public Form1()//表单构造函数
{
初始化组件();
foreach(此.Controls.OfType()中的按钮b)
{
b、 OnkeyDown+=onlynumwithsinglepoint;//或任何事件
}
}

您的文本框是动态创建的还是手动创建的?它们是手动创建的。您可以在designer中选择方法。谢谢Cfrozendath,因为我得到了40多个文本框,所以我试图找到一种方法,使用类似于每个控件的方法来循环它们……我想我们差不多做到了。唯一的问题是,我的函数将限制应用到文本框(它不是来自我)似乎需要一些输入参数。。。public void onlynumwithsinglepoint(object sender,KeyPressEventArgs e)这是事件的函数声明,我的语法显示了如何使用+=notation@Phil,在这种情况下,您必须定义自己的事件参数类,该类继承自
KeyPressEventArgs
class