HOWTO · Csharp
Cómo obtener el valor seleccionado de un ComboBox en C#
Aprenda a leer el elemento seleccionado, el texto mostrado o el valor enlazado de un ComboBox de Windows Forms en C#.
En esta página
En un ComboBox de Windows Forms, «valor seleccionado» puede significar tres cosas diferentes: el objeto del elemento seleccionado, el texto mostrado para ese elemento o su valor enlazado a datos. Lea ComboBox.SelectedItem cuando necesite el objeto, use ComboBox.GetItemText cuando necesite su texto mostrado y lea SelectedValue cuando el control esté enlazado y necesite el campo configurado por ValueMember. Estos ejemplos suponen que el control ya está en un formulario y muestran la selección leyéndose desde un controlador de clic de botón.
Los ejemplos siguientes están dirigidos a una aplicación de Windows Forms. No se proporcionó evidencia de ejecución en tiempo de ejecución para este artículo, por lo que se presentan como ejemplos específicos de Windows no ejecutados; no se afirma ninguna salida de consola.
Use la propiedad ComboBox.SelectedItem para obtener el valor seleccionado de un ComboBox en C#
ComboBox.SelectedItem es una propiedad que obtiene o establece el objeto actualmente seleccionado en la lista. No siempre devuelve una cadena: cuando los elementos son objetos personalizados, el resultado es ese objeto. Conviértalo en texto solo cuando la representación en cadena del elemento sea lo que la aplicación necesita. El siguiente ejemplo completo crea un formulario, selecciona un elemento y lee el objeto actual cuando se hace clic en el botón.
using System;
using System.Windows.Forms;
internal static class Program
{
[STAThread]
private static void Main()
{
ApplicationConfiguration.Initialize();
var form = new Form();
var comboBox = new ComboBox { Left = 12, Top = 12, Width = 180 };
comboBox.Items.AddRange(new object[] { "Red", "Green", "Blue" });
comboBox.SelectedItem = "Green";
var button = new Button { Left = 12, Top = 48, Text = "Read selection" };
button.Click += (sender, args) =>
{
object selectedItem = comboBox.SelectedItem;
string selectedText = Convert.ToString(selectedItem) ?? "";
MessageBox.Show($"Item: {selectedText}");
};
form.Controls.Add(comboBox);
form.Controls.Add(button);
Application.Run(form);
}
}
En un formulario existente, la misma operación puede residir en su controlador de clic: lea comboBox1.SelectedItem y, a continuación, manéjelo según el tipo real del elemento. Si la lista contiene cadenas, el elemento seleccionado es una cadena. Si contiene objetos, convierta el objeto devuelto o aplíquele coincidencia de patrones antes de usar sus propiedades. Una selección también puede estar ausente, por lo que el código que se ejecuta antes de que se seleccione un elemento debe tener en cuenta que SelectedItem puede ser null.
Use ComboBox.GetItemText para obtener el valor seleccionado de un ComboBox en C#
ComboBox.GetItemText(item) es un método que devuelve el texto que el control utiliza para mostrar el elemento suministrado. Llámelo con SelectedItem para obtener el texto mostrado de la selección actual. Esto es útil cuando los elementos son objetos y el ComboBox usa DisplayMember; llamar a ToString() sobre el objeto puede producir un texto diferente. GetItemText responde a una pregunta de visualización, mientras que SelectedValue responde a una pregunta de enlace de datos.
Para un ComboBox enlazado, establezca DisplayMember en la propiedad mostrada al usuario y ValueMember en la propiedad que identifica el elemento. Luego recupere comboBox1.SelectedValue cuando la aplicación necesite ese valor enlazado. El ejemplo muestra ambos resultados para que pueda elegir el que su código necesita:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
internal sealed class City
{
public int Id { get; set; }
public string Name { get; set; } = "";
}
internal static class Program
{
[STAThread]
private static void Main()
{
ApplicationConfiguration.Initialize();
var form = new Form();
var comboBox = new ComboBox { Left = 12, Top = 12, Width = 180 };
comboBox.DisplayMember = nameof(City.Name);
comboBox.ValueMember = nameof(City.Id);
comboBox.DataSource = new List<City>
{
new City { Id = 1, Name = "Paris" },
new City { Id = 2, Name = "Tokyo" }
};
comboBox.SelectedValue = 2;
var button = new Button { Left = 12, Top = 48, Text = "Read selection" };
button.Click += (sender, args) =>
{
string displayedText = comboBox.GetItemText(comboBox.SelectedItem);
object selectedValue = comboBox.SelectedValue;
MessageBox.Show($"Text: {displayedText}; value: {selectedValue}");
};
form.Controls.Add(comboBox);
form.Controls.Add(button);
Application.Run(form);
}
}
Aquí GetItemText lee el texto de visualización (por ejemplo, Tokyo), mientras que SelectedValue lee el Id enlazado (por ejemplo, 2). Utilice el miembro de valor configurado en el control en lugar de tratar el texto de visualización como un identificador. Ambos ejemplos requieren un proyecto de Windows Forms y no se ejecutaron en el entorno de ejecución suministrado.