我正在尝试根据用户界面中的复选框添加电话号码的值。 例如,如果选中了checkbox1(代表phone1)并且也选中了checkbox2,则程序将添加两个手机的值。 如何添加值(例如在for循环中),以便if语句更简洁。
这是我的代码:
public double totalPhone()
{
double total = 0;
double item1 = 2249;
double item2 = 1769;
double item3 = 3099;
double item4 = 1198;
double item5 = 1899;
if (chkPhone1.Checked == true)
{
total = total + item1;
}
if (chkPhone2.Checked == true)
{
total = total + item2;
}
if (chkPhone3.Checked == true)
{
total = total + item3;
}
if (chkPhone4.Checked == true)
{
total = total + item4;
}
if (chkPhone5.Checked == true)
{
total = total + item5;
}
return total;
}
答案 0 :(得分:0)
您可以将复选框的ID及其对应的值存储在Dictionary中,然后遍历控件,检查其类型和checked属性,然后添加与字典中复选框的id对应的值。
注意:代码未经过测试,但这可以帮助您顺利完成。
public double totalPhone()
{
double total = 0;
Dictionary<string,double> items = new Dictionary<string,double>();
items.Add(chkPhone1.ID,2249); // ID,Text whatever works
items.Add(chkPhone2.ID,1769);
items.Add(chkPhone3.ID,3099);
items.Add(chkPhone4.ID,1198);
items.Add(chkPhone5.ID,1899);
foreach(Control c in this.Controls)
{
if(c is CheckBox && c.Checked)
{
total += (items[c.ID] != null ? items[c.ID] : 0);
}
}
return total;
}
答案 1 :(得分:0)
我确信你的代码需要重新分解,但我没有看到任何使用循环的情况。
还有兴趣吗?你可以这样做。请注意,此代码假设项和复选框名称之间的一对一映射。
Dictionary<string, int> values = new Dictionary<string,int>();
int total = 0;
values.Add("item1", 2249);
values.Add("item2", 1769);
values.Add("item3", 3099);
values.Add("item4", 1198);
values.Add("item5", 1899);
foreach( CheckBox cb in this.Controls.OfType<CheckBox>()
.Where(c=>c.Checked))
{
int itemprice;
if(values.TryGetValue("item"+ Regex.Match(cb.Text, @"\d+").Value, out itemprice))
{
total+=itemprice;
}
}
答案 2 :(得分:0)
假设这些复选框都在同一个GroupBox控件中,只需遍历该特定组框中的控件。我测试了它,它似乎工作。使用复选框项的标记属性来存储与其关联的值:
public partial class Form1 : Form
{
private static double Total { get; set; }
private void Form1_Load(object sender, EventArgs e)
{
var ctrl = groupBox1;
foreach (var checkBox in ctrl.Controls.OfType<CheckBox>())
{
Total = checkBox.Checked ? (Total + Convert.ToDouble(checkBox.Tag)) : Total;
}
}
}