how ejemplos agregar c# winforms combobox

ejemplos - how to set a default value in combobox c#



C#ComboBox con texto y valor (2)

La colección ComboBox.Items almacena valores de tipo objeto . Por lo que puede almacenar cualquier tipo de tipo que desee. Genera el valor de visualización del método ToString () del objeto. Para obtener el valor real , simplemente convierta el objeto al tipo de su clase.

Posible duplicado:
C # Winforms Combobox con etiqueta y valor

¿Cómo podría un enfoque almacenar un valor de visualización y un valor real en un ComboBox?

Es decir, el ComboBox muestra:

  • Destruir mundo
  • Tirachinas de fuego
  • Invocar a Cthulhu

pero los valores recuperados son:

  • dw
  • ss
  • Carolina del Sur

Quiero poder recuperar el valor del elemento seleccionado de una manera similar a esto:

string selectedValue = combobox1.SelectedValue

Código actualizado en respuesta a las respuestas:

Dictionary<string, string> filterItems = new Dictionary<string, string> { {"Destroy World", "dw"}, {"Fire Slingshot", "fs"}, {"Summon Cthulu", "sc"}, }; this.options_filterby.DataSource = new BindingSource(filterItems, null); this.options_filterby.DisplayMember = "Key"; this.options_filterby.ValueMember = "Value";

Ahora, por alguna razón, aunque los DisplayMembers están absolutamente bien, los ValueMembers devuelven los objetos del diccionario. Incluso más extraño, después de un tiempo, eventualmente los ValueMembers devolverán las cadenas como se esperaba.

private void options_filterby_SelectedIndexChanged(object sender, EventArgs e) { MessageBox.Show(options_filterby.SelectedValue.ToString()); }

Esto devuelve los diccionarios las primeras veces que cambio el elemento seleccionado de ComboBox, pero eventualmente devuelve cadenas según sea necesario.

Actualización: corregida (no se puede agregar como solución porque la pregunta se cerró)

En respuesta al problema anterior, la solución es establecer las propiedades DisplayMember y ValueMember antes de DataSource. Supongo que esto es un error. El código debe leer:

this.options_filterby.DisplayMember = "Key"; this.options_filterby.ValueMember = "Value"; this.options_filterby.DataSource = new BindingSource(filterItems, null);


Utiliza DisplayMember y ValueMember para determinar qué mostrará ComboBox y qué se devolverá de SelectedValue . Cuando configura la propiedad DataSource , ComboBox usará la propiedad descrita por DisplayMember para representar una cadena para el usuario.

Algo como esto

public class Item { string Name { get; set; } string Value { get; set; } } ComboBox box = new ComboBox(); box.DisplayMember = "Name"; box.ValueMember = "Value"; box.DataSource = new [] { new Item() { "Test", "test" } };

Si no configura ValueMember se ValueMember el artículo real en su lugar, y si no configura DisplayMember , el método ToString() se utilizará para obtener la cadena presentada al usuario.

No estoy seguro de si esto funcionará o si puede cambiar lo que tienes, pero podrías intentarlo al menos :) Lo cierto es que no estoy seguro de qué hace BindingSource cuando obtiene un diccionario como fuente de datos. Sin embargo, supongo que lo trata como un IEnumerable<KeyValuePair<>> , así que su código debería funcionar, pero bueno, no es así, así que quizás esto lo haga ..

BindingSource source = new BindingSource(); source.DataSource = typeof(KeyValuePair<string, string>); foreach (KeyValuePair<string, string> pair in filterItems) { source.Add(pair); } options_filterby = source;