如何避免这样的代码?
dblCalcTotal = dblCalcTotal + Utils.GetDecimal(txtJan.Text, 0);
dblCalcTotal = dblCalcTotal + Utils.GetDecimal(txtMar.Text, 0);
dblCalcTotal = dblCalcTotal + Utils.GetDecimal(txtApr.Text, 0);
dblCalcTotal = dblCalcTotal + Utils.GetDecimal(txtFeb.Text, 0);
dblCalcTotal = dblCalcTotal + Utils.GetDecimal(txtMay.Text, 0);
dblCalcTotal = dblCalcTotal + Utils.GetDecimal(txtJun.Text, 0);
dblCalcTotal = dblCalcTotal + Utils.GetDecimal(txtJul.Text, 0);
dblCalcTotal = dblCalcTotal + Utils.GetDecimal(txtAug.Text, 0);
dblCalcTotal = dblCalcTotal + Utils.GetDecimal(txtSep.Text, 0);
dblCalcTotal = dblCalcTotal + Utils.GetDecimal(txtOct.Text, 0);
dblCalcTotal = dblCalcTotal + Utils.GetDecimal(txtNov.Text, 0);
dblCalcTotal = dblCalcTotal + Utils.GetDecimal(txtDec.Text, 0);
答案 0 :(得分:2)
一个简单的循环可以做到:
var items = new[] {txtJan, txtFeb, txtMar...};
dblCalcTotal = 0;
foreach(var item in items) {
dblCalcTotal += Utils.GetDecimal(item.Text, 0);
}
答案 1 :(得分:2)
假设他们在某种父母的控制下......
for(var control in ParentControl.Controls){
dblCalcTotal += Utils.GetDecimal(control.Text, 0);
}
答案 2 :(得分:2)
每当你有这么多控件时,你应该开始考虑一个更好的控件,一个显示多个值的控件。 DataGridView是这里的最佳选择,因为它允许编辑。这也为自动使用任何语言的UI工作提供了很好的机会。在表单上放一个DGV,使构造函数看起来像这样:
Public Sub New()
InitializeComponent()
Dim col = DataGridView1.Columns.Add("sales", "Sales")
DataGridView1.Columns(col).ValueType = GetType(Decimal)
DataGridView1.AllowUserToAddRows = False
DataGridView1.AllowUserToDeleteRows = False
DataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders
With System.Globalization.CultureInfo.CurrentUICulture
DataGridView1.Rows.Add(.Calendar.GetMonthsInYear(DateTime.Now.Year))
For Each row As DataGridViewRow In DataGridView1.Rows
row.HeaderCell.Value = .DateTimeFormat.MonthNames(row.Index)
row.Cells(col).Value = 0
Next
End With
End Sub
现在计算总数变得简单了:
Private Sub ButtonTotalSales_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonTotalSales.Click
Dim sales As Decimal = 0
For Each row As DataGridViewRow In DataGridView1.Rows
sales += CDec(row.Cells("sales").Value)
Next
'' etc..
End Sub
答案 3 :(得分:1)
这是怎么回事?
double dblCalcTotal = Sum(txtJan.Text, txtFeb.Text, txtMar.Text .....);
private static double Sum(params string[] list)
{
double result = 0;
foreach (string s in list)
{
result += Utils.GetDecimal(s, 0);
}
return result;
}
答案 4 :(得分:1)
将文本框放入List<TextBox>
。
然后您可以使用LINQ:
calcTotal += monthBoxes.Sum(t => Utils.GetDecimal(t.Text, 0));
答案 5 :(得分:0)
首先,将文本框添加到列表中:
List<TextBox> months = new List<TextBox>();
months.add(txtJan);
months.add(txtFeb);
...
然后,在你的方法中:
foreach (Textbox month in months)
{
dblCalcTotal += Utils.GetDecimal(month.Text, 0);
}
答案 6 :(得分:0)
您可以将月份框设为控制数组吗?
如果是这样,代码缩短为:
for (int i = 0; i < txtMonths.Length; i++)
dblCalcTotal += Utils.GetDecimal(txtMonth[i].Text, 0);