2016-03-31 13 views
0

UIのチェックボックスに基づいて電話番号の値を追加しようとしています。 たとえば、チェックボックス1(phone1を表す)がチェックされ、チェックボックス2がチェックされている場合、プログラムは両方の電話機の値を追加します。 if文が小さく単純化されるように、どのように値を(forループなどで)追加することができますか?ここでC#ループチェックボックスと値の追加

は私のコードです:

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

固定チェックボックスはありますか?それらの値は固定されています(2249,1769など...)? –

+0

ループフロントで何を試しましたか?私はあなたが繰り返すコレクションのチェックボックスのようなものがあると思います。 – jdphenix

答えて

0

はすべて同じのGroupBoxコントロールその特定のグループボックス内のコントロールを超えるだけのループです。私はこれを試して、それは動作するようです。チェックボックス項目のTagプロパティを使用して、関連付けられた値を格納します。

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; 
     } 
    } 
} 
+0

これを修正する方法。 "名前"合計 "は現在のコンテキストに存在しません" – izzudinanuar

+0

上記のクラスの変数合計を見てください – aguertin

+0

合計はなぜ倍増し続けますか? – izzudinanuar

0

あなたは辞書内のチェックボックスおよびそれに対応する値のIDを格納し、制御をループ、その種類や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; 
} 
0

あなたのコードにはいくつかの再要因が必要ですが、この単純なケースではループを使用するケースはありません。

まだ興味がありますか?あなたはこのようなことをすることができます。このコードは、の項目のチェックボックス名の間の1対1のマッピングを仮定しています。これらのチェックボックスのを想定し

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; 
    } 
} 
+0

特定のグループボックスで電話機の合計金額を計算したい場合は、コードを変更する必要がありますか? – izzudinanuar

+0

商品ごとに値が異なります。どうしてか分かりません。 – izzudinanuar

+0

Textが 'checkbox1、checkbox2 ....'であるチェックボックスがありますか? –

関連する問題