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 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());
}
}
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.
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
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...
Avez-vous essayé d'utiliser this.typeComboBox.SelectedText
au lieu de typeComboBox.Text
?