2017-02-02 1 views
0

Может кто-то пожалуйста, объясните, как я мог выбрать Programatically элемент в ComboBox, когда элемент определяется следующим образом:Как выбрать программно элемент в поле со списком при использовании ключа, значение пары

class ComboboxItem 
    { 
     public string DisplayString; 
     public string Key; 

     public ComboboxItem(string key, string displayString) 
     { 
      Key = key; 
      DisplayString = displayString; 
     } 

     // Generates the text shown in the combo box 
     public override string ToString() 
     { 
      return DisplayString; 
     } 
    } 

комбо коробка получает заполняется предметами во время выполнения, как это:

myCombo.Items.Add(new ComboboxItem(“<key>“, “<text_to_display>”)); 

Мне нужно, чтобы выбрать элемент программно на основе ключа, но я не могу использовать предложение, сделанное здесь: Set the selecteditem of a combobox based on key,value pair., потому что у меня нет предвидения элементов данных, как ComboBox получает поп во время выполнения. Может ли кто-нибудь помочь? Большое спасибо.

EDIT - это приложение winforms.

+0

У меня есть вопрос, почему вы используете этот класс вообще. Похоже, что он не дает каких-либо преимуществ по сравнению с использованием только строк, и это делает некоторые вещи (например, текущую проблему) намного сложнее. – Abion47

+0

Какое приложение это? Я имею в виду winforms wpf или web? –

+0

Честно говоря, я до сих пор несколько новичок в C#, и я не знаю, как лучше реализовать. Можете ли вы предложить предложение о более удобном способе добавления элементов, имеющих ключ в виде 3-символьного кода и текстового описания. Когда пользователь загружает определенный XML-файл, я извлекаю 3 символьный код из XML-данных, а затем мне нужно предварительно выбрать соответствующий элемент в поле со списком. Большое спасибо. – user2430797

ответ

1

Try что-то вроде этого

comboBox1.Items.Add(new ComboboxItem("a", "a")); 
      comboBox1.Items.Add(new ComboboxItem("b", "b")); 
      comboBox1.Items.Add(new ComboboxItem("c", "c")); 
      comboBox1.Items.Add(new ComboboxItem("d", "d")); 

      var key = "c"; 

      foreach (var item in comboBox1.Items) 
      { 
       var comboItem = (ComboboxItem) item; 
       if (comboItem.Key.Equals(key)) 
        comboBox1.SelectedItem = comboItem; 
      } 

Я просто сделал проект Winforms, и она работала. Выделение показало «c» в качестве выбранного значения

Вы также можете использовать linq. Это может быть способом, чтобы выбрать предмет

public void SelectItem(string key) 
     { 
      var comboItem = comboBox1.Items 
       .Cast<ComboboxItem>() 
       .FirstOrDefault(item => item.Key.Equals(key)); 
      if (comboItem == null) 
      { 
       //do whatever you want 
      } 
      else 
      { 
       comboBox1.SelectedItem = comboItem; 
      } 
     } 

Надеется, что это помогает

+0

Спасибо taquion, I Сейчас я собираюсь работать, я попробую ваше предложение, как только я доберусь туда. Большое спасибо. – user2430797

+0

Отличная работа. Благодарю. – user2430797

1

Глядя на ваш коде, одна вещи, которая на самом деле не вопрос столько, сколько необходимости заново изобретать колесо. Ваш класс ComboboxItem выглядит подозрительно, как Dictionary, поэтому вам не нужно повторно изобретать этот класс со своим классом ComboboxItem.

Другой проблемой является ваш комментарий ...

Мне нужно, чтобы выбрать элемент программно на основе ключа, но я не могу использовать предложение, сделанное здесь: Установите SelectedItem в виде выпадающего списка на основе ключа, пара значений , потому что у меня нет предвидения данных , поскольку ComboBox заполняется во время выполнения.

Если это так, то как вы могли бы знать, что выбрать?

Код Dictionary, ComboBox, Textbox и Button. Dictionary заполняется некоторыми данными и затем устанавливается в DataSource ComboBox. Только текст отображается в поле ComboBox. В форме TextBox используется, чтобы позволить пользователю вводить значение, чтобы изменить выбранное значение ComboBox при нажатии на кнопку Button. Если этот ключ не существует в Dictionary, тогда появляется сообщение, указывающее, что индекс не найден.

Поскольку вы говорите, что не знаете точно, что вы, возможно, ищете, мне любопытно, как вы ожидаете выбрать правильный индекс. Надеюсь, что это имеет смысл.

Dictionary<int, string> comboBoxData = new Dictionary<int, string>(); 
public Form1() { 

    InitializeComponent(); 
    comboBoxData = GetDataDictionary(); 
    comboBox1.DataSource = new BindingSource(comboBoxData, null); 
    comboBox1.DisplayMember = "Value"; 
    comboBox1.ValueMember = "Key"; 
} 

private void SetSelectedIndex(int indexToSelect) { 
    if (comboBoxData.Keys.Contains(indexToSelect)) { 
    comboBox1.SelectedIndex = indexToSelect; 
    } 
    else { 
    MessageBox.Show("The supplied key does not exist!"); 
    } 
} 

private Dictionary<int, string> GetDataDictionary() { 
    Dictionary<int, string> dictionary = new Dictionary<int, string>(); 
    for (int i = 0; i < 15; i++) { 
    dictionary.Add(i, "Item name " + i); 
    } 
    return dictionary; 
} 

private void buttonSelectIndex_Click(object sender, EventArgs e) { 
    if (tbIndexToSelect.Text != "") { 
    int indexToSelect = comboBox1.SelectedIndex; 
    if (int.TryParse(tbIndexToSelect.Text, out indexToSelect)) { 
     SetSelectedIndex(indexToSelect); 
    } 
    } 
} 
+0

Спасибо за предлагаемое решение. Данные передаются из входящего интерфейса в качестве полезной нагрузки XML. Когда мы получаем полезную нагрузку, мы экстраполируем все значения для combobox из полезной нагрузки. – user2430797

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