valor - Obtener el texto del cuadro combinado en C#
obtener un valor de un combobox c# (6)
Completé un cuadro combinado con los valores de un Enum.
Ahora un combobox es texto ¿verdad? Entonces estoy usando un getter y un setter. Tengo problemas para leer el texto.
Aquí está el código:
public BookType type
{
get
{
return (BookType)Enum.Parse(typeof(BookType), this.typeComboBox.Text);
}
set
{
this.typeComboBox.Text = value.ToString();
}
}
Por algún motivo, this.typeComboBox.Text
siempre devuelve una cadena vacía cuando selecciono un elemento en el cuadro combinado.
¿Alguien ve lo que estoy haciendo mal?
EDIT: he llegado a la conclusión de que el problema radica en el tiempo. El momento en el que invoco el texto es, en efecto, después de cambiar el cuadro combinado, pero aún antes de que ese valor se analice como un valor. Problema solucionado de una manera diferente ahora, gracias por todas las ideas.
¿Has probado usar this.typeComboBox.SelectedText
lugar de typeComboBox.Text
?
Acabo de crear un formulario de Windows simple, y todo funcionó bien para mí. Aquí está el código.
public enum Test
{
One, Two, Three
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.comboBox1.DataSource = Enum.GetNames(typeof(Test));
}
public Test Test
{
get
{
return (Test)Enum.Parse(typeof(Test), this.comboBox1.Text);
}
set
{
this.comboBox1.Text = value.ToString();
}
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(this.Test.ToString());
this.Test = Test.Two;
MessageBox.Show(this.Test.ToString());
}
}
Deberías probar this.typeComboBox.SelectedItem.ToString ()
El cuadro combinado comienza en el índice -1, que no tiene texto, por lo tanto, es una cadena vacía: ""
Luego cambio el índice a un BookType que necesito y luego obtengo el resultado incorrecto ...
Establezca DropDownStyle
del ComboBox en DropDownList
. Esto asegurará que solo se puedan seleccionar los elementos que ya están en la lista (no es necesario verificar que el texto sea realmente válido). Luego, si usa Enum.GetValues(typeof(BookType))
para completar el cuadro combinado, typeComboBox.SelectedItem
será un valor de BookType
. Entonces puedes usar esto en el getter y setter de la propiedad.
Entonces para resumir. No tiene que vincular el cuadro combinado a una lista de valores de texto siempre que use el estilo DropDownList. Use la propiedad SelectedItem para obtener un elemento del tipo deseado en lugar de marcar la propiedad Text.
Editar: es posible que deba verificar la propiedad SelectedItem para null
Prueba esto. esto funcionó para mí.
string selectedText = this.ComboBox.GetItemText(this.ComboBox.SelectedItem);
El método GetItemText analiza el elemento y devuelve el texto del límite a ese elemento.