2010-11-28 5 views
3

J'essaie de vérifier qu'une chaîne ne contient que des valeurs connues. Dans ce cas, je dois m'assurer qu'il ne contient que "Shift", "Control" ou "Alt", mais pas nécessairement tous ceux-là. Par exemple, ils devraient être vrais: "Shift + P", "Shift + Control + H", "Alt + U, mais ils ne devraient pas:" Other + P "," Shift + Fake + Y "," Unknown + Shift " + E », etc.La chaîne de vérification ne contient PAS de valeur autre que les valeurs connues [VB.NET]

Voici le code que j'ai essayé d'utiliser.

If Not shortcut.Contains("Shift") Or Not shortcut.Contains("Control") Or Not shortcut.Contains("Alt") Then 
    MessageBox.Show("Invalid") 
End If 

Je vais avoir du mal envelopper ma tête autour de la logique nécessaire pour ce faire je suppose qu'il ya un opérateur logique

Répondre

1

Je crois que vous ne devriez pas utiliser de chaînes à cette fin Vous avez besoin d'un type de données qui peut représenter une combinaison de touches, composée d'une clé "normale" et d'un ensemble de modificateurs (Alt, Control, Shift), dont chacun peut e Il est activé ou désactivé. Les modificateurs on/off peuvent être représentés par une énumération avec des drapeaux, et la clé "normale" peut être représentée par une énumération séparée. Les deux énumérations peuvent être contenues dans une classe. L'énumération System.Windows.Forms.Keys peut être utilisée comme enums. Vous pouvez stocker deux valeurs numériques (une pour les modificateurs, une pour la clé "normale") - les valeurs enum sous-jacentes - et elles représenteront la combinaison. Pas besoin de stocker des chaînes. Si vous utilisez des chaînes à cette fin, vous devez mieux définir vos contraintes. Vos règles ne spécifient pas comment "Shift + Other" est invalide, mais "Shift + F" est. Une façon d'y parvenir, de toute façon, est de séparer la chaîne par "+" (en supposant que c'est toujours le séparateur) et de comparer chaque partie à la liste des valeurs valides, qui contient apparemment "Shift", "Alt", " Contrôle "et toutes les lettres simples.

+0

Je charge ceci à partir d'un fichier CVS. Je peux changer la méthode de stockage pour stocker séparément chaque modificateur et la clé, mais je voudrais comprendre quelle logique est impliquée dans cela. Concernant le point 2, la dernière "valeur" est toujours une clé; les autres sont des modificateurs, dont "Shift", "Control" et "Alt" sont valides. – Steven

+0

J'ai édité la réponse pour suggérer un moyen de valider la chaîne, mais je pense toujours que vous devriez utiliser un meilleur type de données. –

+0

J'ai également ajouté une suggestion pour une méthode de stockage alternative. J'espère que cela l'explique mieux. –

0

Je pense qu'il serait plus facile de diviser la chaîne en segments, puis de parcourir la liste de mots et de comparer ensuite avec les mots qui devraient exister. C'est en C# mais je suppose que vous pourriez le comprendre.

C#:

 string text = "Shift+Control+Alt+Other"; 
     string[] textSegments = text.Split('+'); 
     string[] allowedWords = { "Alt", "Shift", "Control" }; 
     foreach (string t in textSegments) 
     { 
      bool temp = false; 

      foreach (string t2 in allowedWords) 
      { 
       if (t == t2) 
       { 
        temp = true; 
        continue; 
       } 
      } 

      if (!temp) 
      { 
       MessageBox.Show("Wrong!"); 
      } 
      else 
      { 
       MessageBox.Show("Right!"); 
      } 


     } 

La sortie sera 4 MessageBoxes affichage: "droit" "Droite!" "Droite!" "Faux!"

Questions connexes