La validation si un combobox c'est SelectedText propriété est vide échoue toujours
Problème Simple: je vérifie pour voir si une zone de liste déroulante a eu un élément sélectionné avec string.IsNullOrEmpty()
. Le problème est que, même si c'est sélectionnée, le message d'erreur s'affiche. Ce que je fais mal?
Voici mon code:
private void button1Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(comboBox1.SelectedText))//here should skip to else - but doesn't
{
MessageBox.Show("You must select a conversion type", "Error");
}
else
{
if (comboBox1.SelectedText == "Currency")
{
double input = Convert.ToDouble(textBox1.Text);
if (!string.IsNullOrEmpty(comboBox2.SelectedText))
{
string type = comboBox2.SelectedText;
double result = convertCurrency(type, input);
if (result != -1)
{
label1.Text = Convert.ToString(result);
}
}
else
{
MessageBox.Show("You must select a conversion type", "Error");
}
}
else
{
MessageBox.Show("curency");
}
}
}
Remarque: Ceci est mon deuxième programme C# - donc merci de ne pas crier à moi si je suis stupide.
- Pourquoi ne pas vérifier l'indice de la valeur sélectionnée?
- Lors du débogage, quelle est la valeur de la comboBox1.SelectedText propriété? Par ailleurs, le contenu lié aux données, ou tout simplement les éléments ajoutés à la collection?
- index? Que voulez-vous dire?
- Il signifie; msdn.microsoft.com/en-us/library/... lorsque rien n'est sélectionné, il sera -1.
- Quelle est la
DropDownStyle
pour laComboBox
? - Essayez de caractères (string)comboBox2.SelectedItem au lieu de SelectedText
- va jeter l'exception lorsque rien n'est sélectionné.
- Non, il ne sera pas si enveloppé dans un test - par exemple, si(Chaîne de caractères.IsNullOrEmpty((string)cmbDelimiter.SelectedItem) fonctionne très bien
Vous devez vous connecter pour publier un commentaire.
Généralement quelques observations/suggestions.
D'abord vous êtes à l'aide de la chaîne de valeurs et sont en fondant la logique sur ces valeurs, vous voudrez peut-être regarder dans l'aide d'un Enum et la liaison de toutes les valeurs de la liste déroulante. Ensuite, utilisez la propriété SelectedItem et de le comparer à l'Enum.
Lorsque rien n'est sélectionné, la SelectedItem retournera NULL, une autre option est d'utiliser SelectedIndex qui renvoie -1 si aucun élément n'a été sélectionné.
Donc, avec le SelectedIndex il deviendrait quelque chose comme;
Généralement à l'aide de comparaisons de chaînes devrait être fait seulement lorsque quelque chose de "fort" comme un int comparaison ou encore mieux un enum comparaison n'est pas possible. (C'est peut-être juste moi, mais si les chaînes changent souvent et sont tout simplement effrayant pour ce genre de choses.)
Pour les enum suggestion éventuellement regarder un de ces liens;
La liaison d'un enum pour un WinForms zone de liste déroulante, puis le réglage de
Les valeurs de charge de type enum dans un combobox
Est-il possible de charger les éléments d'une énumération en une zone de liste déroulante .NET 3.5?
La liaison d'une zone de liste déroulante à une Énumération
Je ne suis pas sûr .Version NET et les choses que vous êtes en utilisant, comme la liaison est beaucoup plus facile dans WPF, puis dans l'ancien formulaire windows (à mon avis).
de la Doc MSDN, ce qui répond à votre question exactement
De nommage pauvres sur microsoft fait partie. Vous devez utiliser la zone de liste déroulante.Texte pour obtenir ce que vous cherchez.
comboBox.SelectedIndex
l'indice de la valeur sélectionnéecomboBox.SelectedItem
si vous utilisez une source de données, c'est l'élément sélectionné dans la source de donnéescomboBox.SelectedValue
la ValueMember de la source de données ou la valeur actuellement sélectionnée si vous avez ajouté vos propres ÉlémentscomboBox.Text
Le texte que vous voyez, même si elle n'est pas dans la liste.SelectedText
, et se réfère à un texte sélectionné (mis en surbrillance) au sein de la .Texte