检测所有文本框值的更改

时间:2014-10-11 07:25:58

标签: c# windows winforms

我有一个包含很多文本框的表单,我有一个函数,我想在任何文本框中的值更改时运行。有没有办法为每个文本框执行相同的操作而不重复每个文本框的代码?这是适用于一个的代码:

private void Team1Q2_TextChanged(object sender, EventArgs e)
{
    int parsedValue;
    if (!int.TryParse(Team1Q1.Text, out parsedValue))
    {
        Team1Q1.Text = "0";
        return;
    }
    else
    {
        CalculateTotals();
    }
}

5 个答案:

答案 0 :(得分:2)

为您的所有textboxes注册此事件处理程序,并投射sender对象以使用事件提升者文本框。

<强>代码:

private void Team1Q2_TextChanged(object sender, EventArgs e)
{
    TextBox senderTextBox = sender as TextBox;
    int parsedValue;
    if (!int.TryParse(senderTextBox.Text, out parsedValue))
    {
        senderTextBox.Text = "0";
        return;
    }

    else
    {
        CalculateTotals();
    }
}

订阅事件处理程序:

txtbox1.TextChanged += Team1Q2_TextChanged;
txtbox2.TextChanged += Team1Q2_TextChanged;
txtbox3.TextChanged += Team1Q2_TextChanged;
//so on

答案 1 :(得分:1)

在设计模式下,只需将TextBox的所有TextChanged事件设置为Team1Q2_TextChanged

答案 2 :(得分:0)

Team1Q2_TextChanged只是您为其中一个文本框创建的事件处理程序。您可以对所有文本框使用相同的事件处理程序。您必须将所有文本框的已更改事件设置为相同的事件处理程序。

如果要在visual studio designer中设置事件处理程序,只需复制粘贴相同的事件处理程序即可。

如果您正在使用C#代码设置事件处理程序,则可以执行此操作

textBox1.TextChanged += new EventHandler(textBox_TextChanged);
textBox2.TextChanged += new EventHandler(textBox_TextChanged);
textBox3.TextChanged += new EventHandler(textBox_TextChanged);

如果您看到我对所有文本框使用相同的事件处理程序。

答案 3 :(得分:0)

<{1>}中的

,将Form_load事件分配给所有文本框

text_changed

然后您可以处理所有foreach (Control item in this.Controls) { if (item.GetType() == typeof(TextBox)) (item as TextBox).TextChanged += Form6_TextChanged; } 事件

text_changed

答案 4 :(得分:0)

试试这个......

private void TextBoxEventHandler_TextChanged(object sender, EventArgs e)
{
   var entryField = sender as TextBox;

   lblKeyedValue.Text = entryField.Text.ToUpper();
}  

并将此事件处理程序添加到文本框中,如下所示......

yourTextBoxName.TextChanged += new EventHandler(TextBoxEventHandler_TextChanged);