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
SelectedValue
niSelectedText
propiedades 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 propiedadesSelectedValue
oSelectedText
del cuadro combinado, por lo que no es necesario realizar ninguna conversión especial.Debe usar el
dynamic
objeto para resolver el elemento del cuadro combinado en tiempo de ejecución.fuente
Puede usar
Dictionary
Object en lugar de crear una clase personalizada para agregar texto y valor en aCombobox
.Agregar claves y valores en un
Dictionary
objeto: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 elvalue
como unobject
, porque conobject
eso 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
ItemSource
valores 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
OnLoad
controlador de eventos, es necesario establecer el origen de su cuadro combinado a ser una lista deComboEnumItems
base en todos losEnum
de suEnum
tipo. 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á elenum
valor que puede usar en el código. Para acceder a la selección del usuario en el código,comboBoxUserReadable.SelectedItem
será elComboEnumItem
ycomboBoxUserReadable.SelectedValue
será 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
ComboBox
con 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->SelectedItem
ycomboBox1->SelectedIndex
todaví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 claseSomeClass
con lastring
propiedad typeName
,Lo que significa que SelectedItem es un
SomeClass
objetolist
y cada elementocombobox
se mostrará con su nombre.fuente
DisplayMember
antes ... 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 propiedadName
oTag
, 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