2010-11-28 6 views
3

文字列に既知の値だけが含まれていることを確認しようとしています。この場合、「Shift」、「Control」、または「Alt」のみが含まれていることを確認する必要がありますが、必ずしもそのすべてである必要はありません。例えば、 "Shift + P"、 "Shift + Control + H"、 "Alt + U;しかし、これらは" Other + P "、" Shift + Fake + Y "、" Unknown + Shift " + E」など確認文字列に既知の値以外の値が含まれていない[VB.NET]

これは、私が使用しようとしたコードです:。

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

私は困難これを行うために必要なロジックのまわりで私の頭をラップを抱えている私は、論理演算子がありますと仮定していますこれは可能でしょうか?

答えて

1

このような文字列は使用しないでください。「通常」キーと修飾キーのセット(Altキー、Controlキー、 Shift)を使用できます。 itherはオンまたはオフです。 on/off修飾子は、フラグ付きのenumで表すことができ、 "normal"キーは別のenumで表すことができます。両方の列挙型をクラス内に含めることができます。

System.Windows.Forms.Keys列挙型は両方の列挙型として使用できます。 2つの数値(1つは修飾キー用、もう1つは "通常"キー用) - 基本となる列挙型の値 - を格納することができ、これらは組み合わせを表します。文字列を格納する必要はありません。

この目的で文字列を使用する場合は、より良い制約を定義する必要があります。あなたのルールでは、 "Shift + Other"が無効な方法は指定されていませんが、 "Shift + F"は無効です。とにかく、この文字列を "+"(これは常に区切り文字であると仮定して)で区切り、それぞれの部分を "Shift"、 "Alt"、 "コントロール "とすべての単一の文字。

+0

これはCVSファイルからロードしています。私はそれぞれの修飾子とキーを別々に保存するために記憶方法を変更することができますが、私はこれにどのようなロジックが関わっているのか理解したいと思います。ポイント2に関しては、最後の「値」は常にキーです。他は「Shift」、「Control」、および「Alt」が有効な修飾子です。 – Steven

+0

答えを編集して文字列を検証する方法を提案しましたが、より適切なフィッティングデータ型を使用する必要があります。 –

+0

私はまた別の記憶方法の提案を追加しました。私はこれがそれをより良く説明することを願っています –

0

文字列をセグメントに分割し、単語のリストを繰り返して、それから単語が存在するかどうかを比較する方が簡単だと思います。これはC#ですが、私はあなたがそれを理解できると思います。

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


     } 

出力が表示4つのメッセージボックスになります: "!右" "右!" "右!" "違う!"

関連する問題