Obtenez le texte de combobox en C#

j'ai rempli un combobox avec les valeurs d'un Enum.

maintenant un combobox est du texte, n'est-ce pas? Donc j'utilise un getter et un setter. Je vais avoir des problèmes à la lecture du texte.

voici le code:

public BookType type
{
    get
    {
        return (BookType)Enum.Parse(typeof(BookType), this.typeComboBox.Text);
    }
    set
    {
        this.typeComboBox.Text = value.ToString();
    }
}

pour une raison quelconque, this.typeComboBox.Text renvoie toujours une chaîne vide lorsque je sélectionne un élément sur le combobox.

quelqu'un voit ce que je fais mal?

EDIT: je suis venu à la conclusion que le problème réside dans le timing. Le moment où j'invoque le texte est en effet après que j'ai changé le combobox, mais encore avant que cette valeur soit analysée comme une valeur. Problème fixe d'une manière différente maintenant, merci pour toutes les idées.

6
demandé sur abatishchev 2008-11-24 22:53:20

6 réponses

je viens de créer un simple formulaire windows, et tout a bien fonctionné pour moi. Voici le code.

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());
    }
}
0
répondu Rohan West 2008-11-24 20:14:43

essayez ceci. cela a fonctionné pour moi.

string selectedText = this.ComboBox.GetItemText(this.ComboBox.SelectedItem);

la méthode GetItemText analyse l'élément et renvoie le texte de l'lié à cet élément.

34
répondu Muhammedh 2010-08-05 11:22:20

définit le DropDownStyle du ComboBox à DropDownList . Cela garantit que seuls les éléments déjà présents dans la liste peuvent être sélectionnés (il n'est pas nécessaire de vérifier que le texte est effectivement une valeur valide). Ensuite, si vous utilisez Enum.GetValues(typeof(BookType)) pour remplir le combobox, alors la propriété typeComboBox.SelectedItem aura une valeur de BookType . Donc vous pouvez utiliser ceci dans la propriété getter et setter.

pour résumer. Vous n'avez pas à lier le combobox à une liste de valeurs textuelles aussi longtemps que vous utilisez le style DropDownList. Utilisez la propriété SelectedItem pour obtenir un élément du type voulu au lieu de vérifier la propriété Text.

Edit: vous pourriez avoir à vérifier la propriété SelectedItem Pour null

2
répondu Rune Grimstad 2008-11-24 20:18:45

le combobox commence à l'index -1, qui n'a pas de texte, donc une chaîne vide: "

je change alors l'index en un type de livre que j'ai besoin et puis je reçois la mauvaise sortie...

1
répondu Vordreller 2008-11-24 20:07:22

vous devriez essayer ça.typeComboBox.SelectedItem.ToString ()

1
répondu Howler 2008-11-24 20:11:20

Avez-vous essayé d'utiliser this.typeComboBox.SelectedText au lieu de typeComboBox.Text ?

1
répondu Dylan Beattie 2008-11-24 20:11:54