2008-11-24 17 views
6

Completé un cuadro combinado con los valores de un Enum.Obtener el texto del cuadro combinado en C#

Ahora, un cuadro combinado es texto ¿no? 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 alguna razón, 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.

+0

Un problema es el uso de la propiedad de texto. Use la propiedad SelectedItem o, en el peor de los casos, la propiedad SelectedText. –

Respuesta

1

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()); 
    } 
} 
1

El cuadro combinado comienza a índice de -1, que no tiene ningún texto, por tanto, una cadena vacía: ""

entonces cambiar el índice a un BookType que necesito y después consigo la salida equivocada ...

1

usted debe tratar this.typeComboBox.SelectedItem.ToString()

+0

esto arroja una NullReferenceException – Vordreller

1

¿Ha intentado utilizar this.typeComboBox.SelectedText en lugar de typeComboBox.Text?

+0

sí, el mismo resultado – Vordreller

2

Establecer la DropDownStyle del ComboBox a 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, la propiedad typeComboBox.SelectedItem tendrá un valor de BookType. Entonces puedes usar esto en el getter y setter de la propiedad.

Así que 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: Puede que tenga que comprobar la propiedad SelectedItem para nula

34

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 de ese elemento.

+1

La respuesta correcta – Marin

Cuestiones relacionadas