将CheckedListBox选中的项检索到Dictionary Winforms c#

时间:2016-06-20 09:51:59

标签: c# winforms dictionary checkedlistbox

我有一些包含一些数据的字典:

        _myDictionary = new Dictionary<string, bool>
        {
            { "a",true},
            { "b",false},
            { "c",true},
            { "d",false},
        };

我想用这些数据填充CheckedListBox,所以我执行以下操作:

        foreach (string key in _myDictionary.Keys)
        {
            myCheckedListBox.Items.Add(key, _myDictionary[key]);
        }

直到那里一切顺利。现在我需要使用CheckedListBox中的所选项更新字典(从对中更新bool)。

我试图让foreach为字典中的每个对分配,但CheckedListBox.Items需要一个索引。

也许字典不是存储这些数据的最佳结构。

Ant的想法?

2 个答案:

答案 0 :(得分:0)

我通过以下方式解决了我的问题:

        for (int i = 0; i < myCheckedListBox.Items.Count; i++)
        {
            string key = (String)myCheckedListBox.Items[i];
            _myDictionary[key] = myCheckedListBox.GetItemChecked(i);
        }

答案 1 :(得分:0)

您可以执行以下操作来绑定 var list = new List<RandomClass>() { new RandomClass() {Checked = true, ValueDisplayed = "1"}, new RandomClass() {Checked = false, ValueDisplayed = "2"}, new RandomClass() {Checked = true, ValueDisplayed = "3"} }; checkedListBox1.DataSource = list; checkedListBox1.DisplayMember = "ValueDisplayed"; for (int i = 0; i < checkedListBox1.Items.Count; ++i) { checkedListBox1.SetItemChecked(i, ((RandomClass)checkedListBox1.Items[i]).Checked); } checkedListBox1.ItemCheck += (sender, e) => { list[e.Index].Checked = (e.NewValue != CheckState.Unchecked); }; public class RandomClass { public string ValueDisplayed { get; set; } public bool Checked { get; set; } }

(您必须手动跟踪更改)

public void setIsActive(String active) {
    this.active = "Y".equalsIgnoreCase(active);
}