[英]calculations in dynamically generated controls in windows form applications
我正在编写一个程序来学习如何在Button_Click事件中的循环内动态生成控件,现在我正在尝试计算两个字段的乘积以及它们在第三个TextBox中的输出
码:
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
unit.Location = new System.Drawing.Point(unitstartposition, unitstartpositionV);
unit.Size = new System.Drawing.Size(100, 30);
unit.Text = "";
unit.Name = "unit" + i.ToString();
rate.Location = new System.Drawing.Point(ratestartposition, ratestartpositionV);
unit.Size = new System.Drawing.Size(100, 30);
rate.Text = "";
rate.Name = "rate" + i.ToString();
amt.Location = new System.Drawing.Point(amtstartposition, amtstartpositionV);
amt.Size = new System.Drawing.Size(100, 30);
amt.Text = "";
amt.Name = "amt" + i.ToString();
panel1.Controls.Add(unit);
panel1.Controls.Add(rate);
panel1.Controls.Add(amt);
unitstartpositionV += 30;
ratestartpositionV += 30;
amtstartpositionV += 30;
unit = new TextBox();
rate = new TextBox();
amt = new TextBox();
}
现在我想像这样计算
amt0.Text = (ConvertToInt32(unit0.Text) * ConvertToInt32(rate0.Text)).ToString();
amt1.Text = (ConvertToInt32(unit1.Text) * ConvertToInt32(rate1.Text)).ToString();
等等
最后,我想总结所有的amt(i)。 请帮助实现这一目标。
从“ unitstartpositionV + = 30;”行开始 向前,这是我想出的解决方案:
unitstartpositionV += 30;
ratestartpositionV += 30;
amtstartpositionV += 30;
unit = new TextBox();
rate = new TextBox();
amt = new TextBox();
unit.Tag = rate;
rate.Tag = amt;
amt.Tag = unit;
rate.TextChanged += rate_TextChanged;
unit.TextChanged += unit_TextChanged;
}
}
private void rate_TextChanged(object sender, EventArgs e)
{
var rate = sender as TextBox;
var amt = rate.Tag as TextBox;
var unit = amt.Tag as TextBox;
Calc(rate.Text, unit.Text, amt);
}
private void unit_TextChanged(object sender, EventArgs e)
{
var unit = sender as TextBox;
var rate = unit.Tag as TextBox;
var amt = rate.Tag as TextBox;
Calc(rate.Text, unit.Text, amt);
}
private void Calc(string rate, string unit, TextBox amt)
{
int rateInt;
if (!int.TryParse(rate, out rateInt)) return;
int unitInt;
if (!int.TryParse(unit, out unitInt)) return;
amt.Text = (rateInt * unitInt).ToString();
}
(不包括全部的总和)
我已经以一种不寻常的方式解决了这个问题,以适应您所显示的样式。 但是实际上您应该使用数组或列表或某种“集合”来保存控件。 通过查看其他答案,我认为您尚未了解IEnumerable。 那就是您所缺少的概念,它将使这种活动变得更加简单(尤其是“所有总和”的要求)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.