[英]Is there a way to dynamically change the text of a textBox in Visual Studio with C# so that the value is a sum of values from other textboxes?
我需要有一个文本框,该文本框随着其他文本框中的值的更改而动态更改,并且“总计”文本框的值(将是 integer 转换为字符串)必须具有其他值的总和。 有没有办法做到这一点而不必为每个其他文本框创建一个 TextChanged 事件?
一种“无需”连接所有事件的可能解决方案是使用每个文本框的DataBindings
属性。 唯一的问题是我们需要某种DataSource
。 一个简单的 Class 可能是一个简单的解决方案。 例子…
我们可以创建一个 class,它对每个文本框都有一个string
属性,它代表每个文本框中的每个string
。 然后一个Total
属性是所有文本框的总和。 一旦我们实例化了这个 class object,我们就可以将每个文本框DataBindings
分配给 class 中的匹配属性。 这个简化TextBoxTotals
class 可能看起来像……
public class TextBoxesTotal {
public string TB1 { get; set; }
public string TB2 { get; set; }
public string TB3 { get; set; }
public string Total {
get {
int.TryParse(TB1, out int v1);
int.TryParse(TB2, out int v2);
int.TryParse(TB3, out int v3);
return (v1 + v2 + v3).ToString();
}
}
}
然后在 forms 加载事件中,您可以实例化一个新的TextBoxesTotal
object,然后将其用作文本框DataBindings
的DataSource
。 用法可能看起来像……
TextBoxesTotal TextBoxTotals = new TextBoxesTotal();
public Form2() {
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e) {
textBox1.DataBindings.Add(new Binding("Text", TextBoxTotals, "TB1"));
textBox2.DataBindings.Add(new Binding("Text", TextBoxTotals, "TB2"));
textBox3.DataBindings.Add(new Binding("Text", TextBoxTotals, "TB3"));
textBox4.DataBindings.Add(new Binding("Text", TextBoxTotals, "Total"));
}
当用户更改文本框中的文本然后“离开”文本框时,这将“更新”总计文本框。 抱歉,如果这没有太大帮助,因为在我看来,我们仍然必须分配每个文本框。 但它可能会少一点代码。 如果这没有帮助,请告诉我,我将删除它。
我假设您不想为每个TextBox
创建TextChanged
事件处理程序,因为这是一项乏味的工作。 有一种方法可以让它变得简单。
从这样的字段开始:
private TextBox[] textBoxes = null;
然后您可以像这样设置所有TextChanged
事件处理程序:
textBoxes = new []
{
textBox1, textBox2, textBox3,
textBox4, textBox5,
};
foreach (var tb in textBoxes)
{
tb.TextChanged += (_, _) => UpdateTotal();
}
现在可以按照您想要的任何方式定义UpdateTotals
。 这是我的版本:
private void UpdateTotal()
{
var value =
textBoxes
.Select(x =>
double.TryParse(x.Text, out double value)
? value
: 0.0)
.Sum();
textBoxTotal.Text = value.ToString();
}
应该是这样的
标签1.text= textbox1.value + textbox2.value + textbox3.value +.....
在 Visual Studio 中,go 到 Form1.cs[Design] 并左键单击一个文本框,然后在右侧下侧单击显示“事件”的闪电。 搜索“TextChanged”并输入您希望如何命名事件(例如“textBox1_TextChanged”)。 点击回车后,您应该会自动被发送到 Form1.cs,在那里创建了一个新的 void。 在那里,插入 Stefanovici 提出的代码并冲洗并为每个文本框重复
private void textBox1_TextChanged(object sender, EventArgs e) //should automatically be created
{
Label1.text= textbox1.text + textbox2.text + textbox3.text +.....
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.