2012-09-26 3 views
3

У меня есть выпадающий, который привязан к словарю, как это:Настройка выбранного элемента в поле со списком привязан к словарю

Dictionary<int, string> comboboxValues = new Dictionary<int, string>(); 
comboboxValues.Add(30000, "30 seconds"); 
comboboxValues.Add(45000, "45 seconds"); 
comboboxValues.Add(60000, "1 minute"); 
comboBox1.DataSource = new BindingSource(comboboxValues , null); 
comboBox1.DisplayMember = "Value"; 
comboBox1.ValueMember = "Key"; 

Я получаю ключ от SelectedItem вроде этого:

int selection = ((KeyValuePair<int, string>)comboBox1.SelectedItem).Key; 

Поэтому, если мой пользователь выбирает опцию «45 секунд», я возвращаюсь на 45000 и сохраняю это значение в файле XML. Когда мое приложение загружено, мне нужно прочитать это значение, а затем автоматически установить сопоставление. Можно ли это сделать, когда я только ключ 45000? Или мне нужно сохранить значение («45 секунд») в файл вместо ключа?

ответ

6

Да, вы можете использовать только 45000

comboBox1.SelectedItem = comboboxValues[45000]; 

Если вы знаете индекс, то вы можете использовать

comboBox1.SelectedIndex = i; 

я равна нулю на основе и -1 означает отсутствие выбора.

Или установите SelectedItem

comboBox1.SelectedItem = new KeyValuePair<int, string>(45000, "45 seconds"); 

private void Form1_Load(object sender, EventArgs e) 
{ 
    Dictionary<int, string> comboboxValues = new Dictionary<int, string>(); 
    comboboxValues.Add(30000, "30 seconds"); 
    comboboxValues.Add(45000, "45 seconds"); 
    comboboxValues.Add(60000, "1 minute"); 
    comboBox1.DataSource = new BindingSource(comboboxValues, null); 
    comboBox1.DisplayMember = "Value"; 
    comboBox1.ValueMember = "Key"; 
    comboBox1.SelectedItem = comboboxValues[45000]; 
} 
+0

я пытался ваше первое предложение (comboBox1.SelectedItem = comboboxValues ​​[45000];), но он не работал для меня. Произошла ошибка, она просто не дала желаемого эффекта. В настоящее время я использую оператор switch для ключа, а затем устанавливаю SelectedItem для вашего третьего предложения. Это работает для меня, но я чувствую, что жесткое кодирование значений переключателей - не очень гибкое решение. Любые мысли о том, почему ваше первое предложение не работает? – user685869

+0

Это было из кода, который я фактически протестировал. Надеюсь, вы положили этот словарь в словарь первым? И связал это. – Paparazzi

+0

Очень странно. Я только что создал новое приложение WinForms, вставил ваш точный код выше в обработчик события Form1_Load и прошел через него в отладчике. Когда появится моя форма, combobox показывает «30 секунд» (как я ожидал с помощью команды comboBox1.SelectedItem = comboboxValues ​​[30000];). Тем не менее, я вернулся и отредактировал эту строку, чтобы быть comboBox1.SelectedItem = comboboxValues ​​[45000], и когда появится форма, combobox по-прежнему показывает «30 секунд» вместо «45 секунд». Я должен упустить что-то очевидное здесь, если оно работает для вас, но я точно не знаю, что это такое. :-( – user685869

1

Просто используйте

comboBox1.SelectedValue=45000 

и ваше поле со списком будет предварительно выбран с помощью ключа

Смежные вопросы