コントロール:
- 1 コンボボックス
- 1 チェック済みリストボックス
コンボボックス:
- アイテム: 110
- イベント:
- SelectedIndexChanged: 選択したインデックスが変更されるたびに、CheckedListBox の項目コレクションが変更されます
機能:
private void cbSubCategories_SelectedIndexChanged(object sender, EventArgs e)
{
switch(cbSubCategories.Text)
{
clbSubCategories2.Items.Clear();
case "Category 1":
AddSubCategory(0, 15);
break;
//etc.
}
}
private void AddSubCategories2(int from, int to)
{
for (int i = from; i < to; i++)
clbSubCategories2.Items.Add(strSubCategories2[i]);
}
CheckedListBox
- 項目: ComboBox で選択された項目によって異なります
- イベント:
- ItemCheck: チェックした項目をリストに追加します
機能:
List<string> checkedItems = new List<string>();
private void clbSubCategories2_ItemCheck(object sender, ItemCheckEventArgs e)
{
int idx = 0;
if (e.NewValue == CheckState.Checked)
checkedItems.Add(clbSubCategories2.Items[e.Index].ToString());
else if (e.NewValue == CheckState.Unchecked)
{
if (checkedItems.Contains(clbSubCategories2.Items[e.Index].ToString()))
{
idx = checkedItems.IndexOf(clbSubCategories2.Items[e.Index].ToString());
checkedItems.RemoveAt(idx);
}
}
}
ここで、ComboBox で項目Aを選択すると、CheckedListBox に Collection Items Qが含まれるようになります。Qから 2 つのアイテムをチェックし、ComboBox Bから別のアイテムを選択して、CheckedListBox ( W ) のコレクション アイテムも変更します。ここでAに戻ると、 Collection Items Qが再び取得されます。チェックした2つのアイテムも取得したいです。どうすればそれができますか?
私の考えはそのようなものでした(最後に cbSubCategories_SelectedIndexChanged 内にこのコードを追加します)が、この例外をスローしますCollection was modified; enumeration operation may not execute.
:
int x = 0;
foreach (string item in clbSubCategories2.Items)
{
foreach (string item2 in checkedItems)
{
if (item2 == item)
clbSubCategories2.SetItemChecked(x, true);
}
x++;
}