2010-11-25 2 views
1

Je suis nouveau à la création de formulaires dans Visual Studio et C#. Mais j'ai fait une interface utilisateur qui a des comboboxes où DropDownStyle est DropDownList. Les éléments affichés sont Oui et Non, mais je dois attribuer cela comme une valeur booléenne à une propriété sur un objet ai et faire actuellement:Comment puis-je faire un Oui/Non combobox return true/false?

if (cmbExample.Text == "Yes") 
    { 
     ai.isPacketType = true; 
    } 
    else if (cmbExample.Text == "No") 
    { 
     ai.isPacketType = false; 
    } 

Je veux essentiellement faire quelque chose comme ça (ou une autre doublure):

ai.isPacketType = cmbExample.Text; 

Comment lier le texte Oui à la valeur true et Non à false?

+4

Pourquoi n'utilisez-vous pas la case à cocher? – bAN

+1

Et si vous ne pouvez pas utiliser une case à cocher, quel est le problème avec le code qui est plus d'une ligne? Au moins, cela clarifie ce que vous faites. –

Répondre

3

Vous pouvez le faire comme ceci:

ai.isPacketType = (cmbExample.Text == "Yes"); 

Ou si isPacketType est bool?:

ai.isPacketType = string.IsNullOrEmpty(cmbExample.Text) ? (bool?)null : cmbExample.Text == "Yes"; 
+0

Le problème est que la liste déroulante est vide par défaut. Lorsque l'utilisateur clique dessus, il n'y a plus qu'à choisir entre Oui et Non. ai.isPacketType est null par défaut et pas faux, donc je devrais faire ai.isPacketType = (cmbExample.Text == "Non"); aussi. Je ne le ferais pas? –

+0

Cela dépend: à quoi voulez-vous mettre 'isPacketType' si l'utilisateur ne sélectionne rien? –

+0

Je veux forcer l'utilisateur à sélectionner vrai ou faux.False n'est pas la valeur par défaut. C'est une sorte de sécurité, car il est important de ne pas définir de valeur pour l'utilisateur. C'est pour un document XML et l'utilisateur doit tout remplir. Donc, la propriété n'est pas définie du tout. Vous obtiendriez une exception NullPointerException en ce moment. –

0
ai.isPacketType = (cmbExample.Text == "Yes"); 
0

Vous pouvez bien sûr écrire comme ça

ai.isPacketType = cmbExample.Text == "Yes"; 
0

Idéalement tu veux probablement pour créer un petit wrapper class/struct autour de Boolean. Vous pouvez ensuite remplacer la valeur ToString() pour renvoyer Oui ou Non.

La valeur sous-jacente restera la même, mais l'interface utilisateur affichera une valeur différente en utilisant les propriétés ValueMember et DisplayMember sur un contrôle ComboBox.

Cela serait probablement considéré comme une approche MVVM, en ajoutant un ViewModel sur vos données pour le rendre bien sur l'interface utilisateur, sans le piloter directement avec un code conditionnel.

0

Vous pouvez utiliser ai.isPacketType = cmbExample.Text == "Yes" (sensible à la casse) ou ai.isPacketType = string.Compare(cmbExample.Text, "Yes", true) == 0 (insensible à la casse).

-1

Cant vous utilisez la propriété 'checked', qui vous donnera vrai est cochée et fausse si elle est décochée:

ai.isPacketType = cmbExample.Checked;

+1

C'est une zone de liste déroulante, pas une case à cocher. – wj32

1

Si vous voulez faire cela et que vous utilisez la liaison de données, il existe un moyen simple de le faire décrit dans this blog post. Fondamentalement, vous configurez deux paires de valeurs clés:

private List<KeyValuePair<string, bool>> GenerateYesNo() 

{ 
    List<KeyValuePair<string, bool>> yesNoChoices = new List<KeyValuePair<string,bool>>(); 

    yesNoChoices.Add(new KeyValuePair<string, bool>("Yes", true)); 
    yesNoChoices.Add(new KeyValuePair<string, bool>("No", false));  
    return yesNoChoices; 
} 

Ou dans VB.Net:

Private Function GenerateYesNo() As List(Of KeyValuePair(Of String, Boolean)) 
    Dim yesNoChoices As New List(Of KeyValuePair(Of String, Boolean)) 

    yesNoChoices.Add(New KeyValuePair(Of String, Boolean)("Yes", True)) 
    yesNoChoices.Add(New KeyValuePair(Of String, Boolean)("No", False)) 

    Return yesNoChoices 
End Function 

et se lient à cet ensemble de paires. Pour plus de détails, suivez le lien du blog.

Questions connexes