我有一个以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名称。
有没有办法不写文本框名称就会取名字?
答案 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实例自动分配给处理程序。如果您将广泛使用此处理程序,可能在更多视图中,这可以节省一些时间和大量的样板代码。