texto seleccionado obtener item form ejemplos .net winforms combobox

.net - seleccionado - obtener value combobox c#



¿Cómo crear un Combobox de Winforms con Label y Value? (6)

Hay una propiedad llamada DisplayMember = nombre de la propiedad cuyo valor se usará para mostrar, y ValueMember que es la propiedad del que se usará para el valor.

Principalmente soy un desarrollador ASP.NET pero estoy trabajando en una aplicación WinForms y noté una gran diferencia entre el cuadro combinado ASP.NET (selección html) y el de WinForms. Encontré (tal vez incorrectamente) que el cuadro combinado de WinForm solo tiene una "etiqueta", mientras que ASP.NET le permite especificar una "etiqueta" y un "valor".

Estoy buscando utilizar un cuadro combinado de WinForms (u otro control comparable) con una etiqueta y un valor (Foobar / 42329). es posible? Intenté buscar la respuesta pero no he encontrado mucho. Si no hay forma de lograrlo, ¿cómo se puede avanzar y diseñar un cuadro combinado de WinForm que represente Ciudades con su id de base de datos asociada?

  • Toronto / 2324
  • Montreal / 64547
  • Vancouver / 1213

Podría intentar crear una clase pequeña llamada ComboBoxItem , así:

public class ComboBoxItem<T> { public string Label { get; set; } public T Value { get; set; } public override string ToString() { return Label ?? string.Empty; } }

Y luego, cuando necesite obtener un objeto, simplemente transfiéralo a un ComboBoxItem .


Puedo pensar en algunas maneras:

  • anular ToString() de una clase City para return Name + " / " + Id;
  • ídem, pero con un TypeConverter
  • agregue una propiedad DisplayText que devuelva lo mismo y use DisplayMember
  • construir una clase shim para los datos

Por el último:

var data = cities.Select(city => new { Id = city.Id, Text = city.Name + " / " + city.Id }).ToList(); cbo.ValueMember = "Id"; cbo.DisplayMember = "Text"; cbo.DataSource = data;


Suponiendo que sus valores son únicos, primero puede poblar un diccionario y luego vincular el cuadro combinado al diccionario. Lamentablemente, la vinculación de datos requiere un IList o un IListSource, por lo que debe envolverlo en Binding Source. Encontré la solución here .

private void PopulateComboBox() { var dict = new Dictionary<int, string>(); dict.Add(2324, "Toronto"); dict.Add(64547, "Vancouver"); dict.Add(42329, "Foobar"); comboBox1.DataSource = new BindingSource(dict, null); comboBox1.DisplayMember = "Value"; comboBox1.ValueMember = "Key"; }


Un ComboBox se puede vincular a una colección de objetos estableciendo su propiedad DataSource .

De forma predeterminada, la propiedad SelectedValue dará el objeto que se seleccionó, y la lista llamará a ToString en cada objeto y mostrará el resultado.
Sin embargo, si configura la propiedad DisplayMember de ComboBox, se mostrará el valor de la propiedad nombrada en DisplayMember en la lista. De forma similar, puede establecer la propiedad ValueMember de ComboBox y la propiedad SelectedValue devolverá el valor de la propiedad nombrada por ValueMember.

Por lo tanto, debe vincular el ComboBox a una lista de objetos que tienen propiedades de Name y Value .
A continuación, puede establecer la propiedad [ DisplayMember ComboBox a Name y ValueMember en Value .

EDITAR : También puede llamar al método Add y darle un objeto en lugar de un enlace de datos. Alternativamente, podría vincularlo a una List<T> o a una matriz.


anestezi.DisplayMember = "Text"; anestezi.ValueMember = "Value"; anestezi.DataSource = new[] { new { Text = "Genel", Value = "G" }, new { Text = "Lokal", Value = "L" }, new { Text = "Sedasyon", Value = "S" } }; anestezi.SelectedIndex = 0;