自动化标签以提供来自文本框的整数总和

Automating a label to provide sum of integers from textboxes

我有多个文本框,其中包含用户提供的数字。在所有文本框的底部,我想要一个标签,它将提供上面文本框中所有数字的总和。不需要按钮,标签会随着用户在文本框中键入内容而自动更新。这是我从网上借来的例子。

http://tinypic.com/r/ev5ely/8

请注意,数字是在没有 button_click 方法的情况下自动更新的。有什么建议可以实现这一目标吗?提前致谢!

首先您需要一个组框并将所有涉及的文本框和标签添加到该组框中。例如,您的组框名称是 Groupbox1.

通过属性手动或以编程方式将 TextChanged 事件添加到您的文本框,如下所示:

TextBox1.TextChanged += onTextChanged;
TextBox2.TextChanged += onTextChanged;
...........
TextBoxN.TextChanged += onTextChanged;

现在在 onTextChanged 事件中,

protected void onTextChanged(object sender, EventArgs e){
    try{
            int sum = 0;//your sum
            foreach (Control c in groupBox1.Controls)//iterate over each control insied groupbox
            {
                if (c as TextBox != null)//if controller is a textbox instance
                {
                    sum += Convert.ToInt32(c.Text);//you can use float long or double datatype according to your need
                }
            }
            Label1.Text = sum.ToString();//sum of the integers in all text boxes
        }
        catch( Exception ex){
             //your exception handling for num integer input goes here
        }
}

还有一件事,

您可以通过两种方式向控件添加事件处理程序。 1. 在设计期间,在属性 windows 中搜索事件 "TextChanged" 并最终添加事件处理程序 "onTextChanged"。 2. 正如我之前演示的那样,在运行时, textbox1.TextChanged += onTextChanged 然而,你却做了这样的事

//this wrong and will not work at all
private void textBox3_TextChanged(object sender, EventArgs e)
{
    textBox3.TextChanged +=  onTextChanged;
}

例如,您必须已将事件处理程序 "textBox2_TextChanged" 添加到 "textbox2" 的 "TextChanged" 事件。有趣的是,在此事件处理程序中,您为同一事件添加了另一个事件处理程序 "onTextChanged"。请注意“+=”,这意味着多播委托(包含多个方法的委托)。因此,每次您在文本框中键入内容时,都会调用此事件并最终添加 onTextChanged。结果,事件将由于“+=”运算符而堆叠起来。因此,当您第一次在文本框中输入内容时(对于所有人)什么都不会发生,但是下次您输入内容时,您的 "textBox2_TextChanged" 和 "onTextChanged" 都将被触发,并且 "onTextChanged" 事件将再次发生被添加等等。因此,这不是将事件分配给您的控件的理想场所。您将这些事件分配到其他地方,例如 FormLoad,它在表单初始化期间将不惜任何代价只调用一次。此外,正如我所提到的,您也可以在设计期间在属性 windows 中分配这些事件。