自动化标签以提供来自文本框的整数总和
Automating a label to provide sum of integers from textboxes
我有多个文本框,其中包含用户提供的数字。在所有文本框的底部,我想要一个标签,它将提供上面文本框中所有数字的总和。不需要按钮,标签会随着用户在文本框中键入内容而自动更新。这是我从网上借来的例子。
请注意,数字是在没有 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 中分配这些事件。
我有多个文本框,其中包含用户提供的数字。在所有文本框的底部,我想要一个标签,它将提供上面文本框中所有数字的总和。不需要按钮,标签会随着用户在文本框中键入内容而自动更新。这是我从网上借来的例子。
请注意,数字是在没有 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 中分配这些事件。