当我在WinForms C#2010中将文本框作为参数传递时,如何使用文本框而不使用文本框名称

时间:2014-03-03 04:31:39

标签: c# winforms

我有一个以TextBox为参数的函数。我在文本框更改事件下使用此功能。

    private void ZeroDigit(TextBox txt)
    {
        string Prefix = "";
        for (int i = 0; i < txt.MaxLength; i++)
            Prefix += "0";
        txt.Text = (txt.Text.Trim() == "" ? "" : string.Format("{0:" + Prefix.Trim() + "}", System.Convert.ToInt32(txt.Text.Trim())));
    }


    private void txtCCID_TextChanged(object sender, System.EventArgs e)
    {
        ZeroDigit(txtCCID);
    }

问题是我在使用此功能时每次都要编写每个文本框名称。 在这里我写了ZeroDigit(txtCCID),如果我想使用10个TextBox,我必须写10次10​​个不同的TextBox名称。

有没有办法不写文本框名称就会取名字?

4 个答案:

答案 0 :(得分:3)

创建一个处理程序并将所有文本框绑定到它。然后将sender对象传递给您的函数。

private void textbox_TextChanged(object sender, System.EventArgs e)
{
    ZeroDigit(sender as TextBox);
}

答案 1 :(得分:2)

是的,

private void TextBox_TextChanged(object sender, System.EventArgs e)
{
    ZeroDigit(sender as TextBox);
}

现在将此事件附加到所有TextBox

txtCCID.TextChanged +=TextBox_TextChanged;

或者你可以在加载

中使用它
 foreach(Control Ctl in this.Controls)
   {
if(Ctl is TextBox)
(Ctl as TextBox).TextChanged +=TextBox_TextChanged;
}

答案 2 :(得分:1)

为每个TextBox的TextChanged事件分配相同的事件处理程序。像这样:

txtCCID.TextChanged += txtCCID_TextChanged;
txtAnotherTextBox.TextChanged += txtCCID_TextChanged;

依旧......

然后使用sender参数来决定哪个文本框引发了此事件。

答案 3 :(得分:0)

是的,像其他人想的那样创建统一的处理程序。 如果您在没有使用图形设计器的情况下通过代码创建gui,您可以考虑创建自己的类MyHandledTextBox,派生自TextBox类,对它的唯一更改是在构造函数中,每个{{1实例自动分配给处理程序。如果您将广泛使用此处理程序,可能在更多视图中,这可以节省一些时间和大量的样板代码。