En C # WinApp, ¿cómo puedo agregar texto y valor a los elementos de mi ComboBox? Hice una búsqueda y, por lo general, las respuestas usan "Enlace a una fuente" ... pero en mi caso no tengo una fuente de enlace lista en mi programa ... ¿Cómo puedo hacer algo como esto?
combo1.Item[1] = "DisplayText";
combo1.Item[1].Value = "useful Value"

fuente
Puede usar una clase anónima como esta:
ACTUALIZACIÓN: Aunque el código anterior se mostrará correctamente en el cuadro combinado, no podrá usar
SelectedValueniSelectedTextpropiedades deComboBox. Para poder usarlos, vincule el cuadro combinado de la siguiente manera:fuente
List<Object> items = new List<Object>();Luego pude usar el métodoitems.Add( new { Text = "report A", Value = "reportA" } );dentro del ciclo.comboBox.SelectedItem.GetType().GetProperty("Value").GetValue(comboBox.SelectedItem, null)DataSource, puede usar las propiedadesSelectedValueoSelectedTextdel cuadro combinado, por lo que no es necesario realizar ninguna conversión especial.Debe usar el
dynamicobjeto para resolver el elemento del cuadro combinado en tiempo de ejecución.fuente
Puede usar
DictionaryObject en lugar de crear una clase personalizada para agregar texto y valor en aCombobox.Agregar claves y valores en un
Dictionaryobjeto:Enlace el objeto del Diccionario fuente a
Combobox:Recuperar clave y valor:
Fuente completa: Combobox Text nd Value
fuente
Esta es una de las formas que me vino a la mente:
combo1.Items.Add(new ListItem("Text", "Value"))Y para cambiar el texto o el valor de un elemento, puede hacerlo así:
No hay una clase llamada ListItem en Windows Forms . Solo existe en ASP.NET , por lo que deberá escribir su propia clase antes de usarla, al igual que @Adam Markowitz hizo en su respuesta .
También revise estas páginas, pueden ayudar:
Cómo agregar un elemento a un cuadro combinado
Cómo: Agregar y quitar elementos de un control ComboBox, ListBox o CheckedListBox de Windows Forms
fuente
No sé si esto funcionará para la situación dada en la publicación original (no importa el hecho de que esto sea dos años después), pero este ejemplo funciona para mí:
Para volver a leer su valor, tendrá que convertir la propiedad SelectedItem en un objeto DictionaryEntry, y luego puede evaluar las propiedades Clave y Valor de eso. Por ejemplo:
fuente
fuente
Si alguien todavía está interesado en esto, aquí hay una clase simple y flexible para un elemento de cuadro combinado con un texto y un valor de cualquier tipo (muy similar al ejemplo de Adam Markowitz):
Usar el
<T>es mejor que declarar elvaluecomo unobject, porque conobjecteso tendrías que hacer un seguimiento del tipo que usaste para cada elemento y lanzarlo en tu código para usarlo correctamente.Lo he estado usando en mis proyectos desde hace bastante tiempo. Es realmente útil.
fuente
Me gustó la respuesta de Fab, pero no quería usar un diccionario para mi situación, así que sustituí una lista de tuplas.
fuente
Un ejemplo usando DataTable:
fuente
Puede usar este código para insertar algunos elementos en un cuadro combinado con texto y valor.
C#
XAML
fuente
Además de la respuesta de Adam Markowitz, aquí hay una forma de propósito general de (relativamente) simplemente establecer los
ItemSourcevalores de un cuadro combinadoenums, mientras se muestra el atributo 'Descripción' al usuario. (Uno pensaría que todos querrían hacer esto para que sea un .NET one liner, pero simplemente no lo es, y esta es la forma más elegante que he encontrado).Primero, cree esta clase simple para convertir cualquier valor de Enum en un elemento ComboBox:
En segundo lugar, en el
OnLoadcontrolador de eventos, es necesario establecer el origen de su cuadro combinado a ser una lista deComboEnumItemsbase en todos losEnumde suEnumtipo. Esto se puede lograr con Linq. Luego solo configuraDisplayMemberPath:Ahora el usuario seleccionará de una lista de sus usuarios amigables
Descriptions, pero lo que seleccionarán será elenumvalor que puede usar en el código. Para acceder a la selección del usuario en el código,comboBoxUserReadable.SelectedItemserá elComboEnumItemycomboBoxUserReadable.SelectedValueserá elEMyEnum.fuente
Puede usar un tipo genérico:
Ejemplo de uso de un tipo int simple:
fuente
Tuve el mismo problema, lo que hice fue agregar un nuevo
ComboBoxcon solo el valor en el mismo índice, luego el primero, y luego, cuando cambio el combo principal, el índice en el segundo cambia al mismo tiempo, luego tomo el valor del segundo combo y úsalo.Este es el código:
fuente
Clase creat:
Códigos Form1:
fuente
Así es como lo hace Visual Studio 2013:
Objeto unico:
Artículos múltiples:
No es necesario anular la clase ni incluir nada más. Y sí, las llamadas
comboBox1->SelectedItemycomboBox1->SelectedIndextodavía funcionan.fuente
Esto es similar a algunas de las otras respuestas, pero es compacto y evita la conversión al diccionario si ya tiene una lista.
Dado un
ComboBox"cuadro combinado" en un formulario de Windows y una claseSomeClasscon lastringpropiedad typeName,Lo que significa que SelectedItem es un
SomeClassobjetolisty cada elementocomboboxse mostrará con su nombre.fuente
DisplayMemberantes ... Siempre olvido que existe. Me acostumbré a la solución que encontré antes de prestar atención a esta propiedad, además, no siempre ayudará. No todas las clases tienen una propiedadNameoTag, o tienen una propiedad de cadena que podría usarse arbitrariamente como texto de visualización.base.Method();), también tendrías que crear una clase derivada para cada tipo diferente que desee agregar a cuadros combinados o cuadros de lista. La clase que hice es flexible, puedes usarla con cualquier tipo sin esfuerzo adicional. Mira a continuación mi respuesta y dime lo que piensas :)Esta es una solución muy simple para formularios de Windows si todo lo que se necesita es el valor final como una (cadena). Los nombres de los elementos se mostrarán en el cuadro combinado y el valor seleccionado se puede comparar fácilmente.
y en el controlador de eventos obtener el valor (cadena) del valor seleccionado
fuente
Mejor solución aquí;
Recuperar datos
fuente