WinFormsアプリケーションがあります。ComboBoxに次のコードを入力しました。
cboGridSize.Items.Clear();
for (int i = 2; i <= 12; i++)
cboGridSize.Items.Add(new KeyValuePair<string,int>(i.ToString(), i));
cboGridSize.SelectedValue = 4;
ただし、最後の行はまったく効果がありません。アイテムが選択されていない状態でComboBoxが表示されます。
だから私はいくつかのデバッグをしていて、いくつかの奇妙なことに気づきました。cboGridSize.SelectedIndex
次の画像は、 0に設定した後のウォッチウィンドウからのものです。
ウォッチウィンドウhttp://www.softcircuits.com/Client/debugwin.jpg
SelectedItem
プロパティには私が期待するものが正確に含まれていますが、それでもSelectedValue
ですnull
。のドキュメントSelectedValue
は哀れですが、選択したアイテムの値が含まれていることを理解しました(SelectedItem
)。代わりに、2つのプロパティは完全に無関係のようです。誰かが私が間違っていることを見ることができますか?
ご覧のとおり、ValueMember
プロパティが設定されています。そして、DropDownStyle
プロパティはに設定されDropDownList
ます。
編集:
Nikolay Khilがここで問題にまっすぐに私を設定した後(なぜそれをSelectedValue
しないためのドキュメントが私を逃れるのか)、私は同じタスクを達成するために単に自分のコードを書くことにしました。誰かが興味を持っている場合に備えて、ここに投稿します。
static class ComboBoxHelper
{
public static void LookupAndSetValue(this ComboBox combobox, object value)
{
if (combobox.Items.Count > 0)
{
for (int i = 0; i < combobox.Items.Count; i++)
{
object item = combobox.Items[i];
object thisValue = item.GetType().GetProperty(combobox.ValueMember).GetValue(item);
if (thisValue != null && thisValue.Equals(value))
{
combobox.SelectedIndex = i;
return;
}
}
// Select first item if requested item was not found
combobox.SelectedIndex = 0;
}
}
}
これは拡張メソッドとして実装されているため、元のコードを次のように変更するだけです。
cboGridSize.Items.Clear();
for (int i = 2; i <= 12; i++)
cboGridSize.Items.Add(new KeyValuePair<string,int>(i.ToString(), i));
cboGridSize.LookupAndSetValue(4);