2010-11-28 3 views
3

Ich versuche zu überprüfen, dass eine Zeichenfolge nur bekannte Werte enthält. In diesem Fall muss ich sicherstellen, dass es nur "Shift", "Control" oder "Alt" enthält, aber nicht unbedingt alle. Zum Beispiel sollten diese wahr sein: "Shift + P", "Shift + Strg + H", "Alt + U; aber diese sollten nicht:" Andere + P "," Shift + Fake + Y "," Unbekannt + Shift + E“usw.Überprüfungszeichenfolge enthält KEINEN anderen Wert als bekannte Werte [VB.NET]

Dies ist der Code, den ich zu verwenden versucht.

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

ich Schwierigkeiten meinen Kopf bin Umwickeln der benötigten Logik, dies zu tun ich gehe davon aus gibt es einen logischen Operator, dass

Antwort

1

Ich glaube, dass Sie keine Strings für diesen Zweck verwenden sollten.Sie benötigen einen Datentyp, der eine Hotkey-Kombination darstellen kann, die aus einem "normalen" Schlüssel und einer Reihe von Modifikatoren (Alt, Control, Shift), von denen jeder e ob es an oder aus ist. Die Ein/Aus-Modifizierer können durch eine Aufzählung mit Flags dargestellt werden, und der "normale" Schlüssel kann durch eine separate Aufzählung dargestellt werden. Beide Enums können in einer Klasse enthalten sein.

Die System.Windows.Forms.Keys Enumeration kann als beide enums verwendet werden. Sie können zwei numerische Werte speichern (einen für die Modifikatoren, einen für den "normalen" Schlüssel) - die zugrunde liegenden Enum-Werte - und sie stellen die Kombination dar. Keine Notwendigkeit, Zeichenfolgen zu speichern.

Wenn Sie für diesen Zweck Zeichenfolgen verwenden, müssen Sie Ihre Abhängigkeiten besser definieren. Ihre Regeln geben nicht an, wie "Shift + Other" ungültig ist, aber "Shift + F" ist. Eine Möglichkeit, dies zu tun, besteht darin, die Zeichenfolge durch "+" zu trennen (vorausgesetzt, dies ist immer das Trennzeichen) und dann jeden Teil mit der Liste gültiger Werte zu vergleichen, die scheinbar "Shift", "Alt", "" enthält. Kontrolle "und alle einzelnen Buchstaben.

+0

Ich lade dies aus einer CVS-Datei. Ich kann die Speichermethode ändern, um jeden Modifizierer und den Schlüssel separat zu speichern, aber ich würde gerne verstehen, welche Logik daran beteiligt ist. Bezüglich Punkt 2 ist der letzte "Wert" immer ein Schlüssel; die anderen sind Modifikatoren, von denen "Shift", "Control" und "Alt" gültig sind. – Steven

+0

Ich habe die Antwort bearbeitet, um eine Möglichkeit zur Überprüfung der Zeichenfolge vorzuschlagen, aber ich denke immer noch, dass Sie einen besser passenden Datentyp verwenden sollten. –

+0

Ich habe auch einen Vorschlag für eine alternative Speichermethode hinzugefügt. Ich hoffe, das erklärt es besser. –

0

Ich denke, es wäre einfacher, die Zeichenfolge in Segmente aufzuteilen und dann durch die Liste der Wörter zu iterieren und dann zu vergleichen, welche Wörter existieren sollten. Dies ist in C#, aber ich denke, Sie könnten es herausfinden.

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!"); 
      } 


     } 

Der Ausgang 4 Message wird die Anzeige: "Right" "Recht!" "Recht!" "Falsch!"

Verwandte Themen