リストボックスとメンバープロパティを同期させて辞書をリストボックスにバインドすることはできますか?winformsのリストボックスに辞書をバインドする方法
19
A
答えて
35
var choices = new Dictionary<string, string>();
choices["A"] = "Arthur";
choices["F"] = "Ford";
choices["T"] = "Trillian";
choices["Z"] = "Zaphod";
listBox1.DataSource = new BindingSource(choices, null);
listBox1.DisplayMember = "Value";
listBox1.ValueMember = "Key";
(臆面もなく私自身のブログから持ち上げ:Bind a ComboBox to a generic Dictionary)
これは、あなたがリストボックスで選択した項目に対応する辞書のキーのホールドを取得するためにSelectedValueのを使用できることを意味します。
0
私はあなたがイベントを使用できると思います。 ListBoxで何かが変更されると、eventHandlerメソッドはDictionaryから同じものを追加/削除します。
0
label1.Text= listBox1.SelectedIndex.ToString();
if (listBox1.SelectedItem is KeyValuePair<int,DockStyle>)
{
var temp1 = (KeyValuePair<int, DockStyle>)listBox1.SelectedItem;
label3.Text = temp1.Key.ToString();
label4.Text = temp1.Value.ToString();
}
実際には 'BindingSource'が必要ですか? –
私の経験ではBindingSourceが必要です。 –
これを試してみましたが、部分的に動作します。つまり、リストボックスのデータソースを設定した後です。 ["M"] = "abc"; choices.Remove( "T"); リストボックスは選択辞書の変更を反映していません... –