2017-09-28 4 views
0

私はC#で、辞書の各要素のチェックボックスを示すWindowsフォームダイアログを持っています。ダイアログは、選択されたすべての要素(チェックボックス)を含むリストを返します。しかし、チェックボックスを選択してもう一度チェックを外すと、Elementは返されたSelected ElementsのListに残ります。 これを修正するにはどうすればよいですか?コメントを1としてC#Checkbox-Dialogチェックをはずすには

public SelectDialog(Dictionary<string, string> Result) 
    { 
     int left = 45; 
     int idx = 0; 
     InitializeComponent(); 
     for (int i = 0; i < Result.Count; i++) 
     { 
      CheckBox rdb = new CheckBox(); 
      rdb.Text = Result.Values.ElementAt(i).Equals("") ? Result.Keys.ElementAt(i) : Result.Values.ElementAt(i); 
      rdb.Size = new Size(100, 30); 
      this.Controls.Add(rdb); 
      rdb.Location = new Point(left, 70 + 35 * idx++); 
      if (idx == 3) 
      { 
       idx = 0; //Reihe zurücksetzen 
       left += rdb.Width + 5; // nächste Spalte 
      } 
      rdb.CheckedChanged += (s, ee) => 
      { 
       var r = s as CheckBox; 
       if (r.Checked) 
        this.selectedString.Add(r.Text); 
      }; 
     } 
    } 
//Some more Code 
} 
+0

したがって、未チェックの項目を 'this.selectedString'から除外する必要がありますか? –

+0

@ un-luckyはい、そうだと思います。 – dnks23

答えて

1

: 私のダイアログは次のようになり提起イベントがオフになっている場合は、リストから項目を削除する必要が

、私はあなたがすでに追加の項目をチェックするために持っていると思います重複を避け、存在する場合は項目を削除します。ハンドラは次のようになります:

rdb.CheckedChanged += (s, ee) => 
     { 
      var r = s as CheckBox; 
      var itemIndex = this.selectedString.IndexOf(r.Text) 
      if (r.Checked && itemIndex == -1) 
       this.selectedString.Add(r.Text); 
      else if(!r.Checked && itemIndex != -1) 
      {     
       this.selectedString.RemoveAt(itemIndex); 
      } 
     }; 
関連する問題