1

ユーザーが keypress イベントで一重引用符を入力できないようにしようとしています。簡単なことのように思えます。私が使用しなければならないのは KeyChar だけです。char にキャストして Keys.Right (右矢印の場合) と比較すると、奇妙な理由で一重引用符が一致します。私はこれに困惑しています。一重引用符が右矢印に一致する理由は何ですか? 私が見るすべての例は、キーと比較するためにこれと同じキャストを行うだけです。

Func<char, bool> IsEditingKey = k =>
            {
                if (k == (char)Keys.Left || k == (char)Keys.Right || k == (char)Keys.Delete || k == (char)Keys.Back)
                {
                    return true;
                }

               return false;
           };

シングル クォート (') を渡すと、k == (char)Keys.Right のテストが発生したときに true が返されます。おそらくキャストの問題ですが、一重引用符( ')ではなく、実際に右矢印であることを確認するには、他にどのように比較しますか?

4

3 に答える 3

3

文字と仮想キーを混同しています。同じことではありません。Keys.Right の値は 0x27 です。 '\''も 0x27 です。1 つは列挙型で、もう 1 つは char です。

適切なイベントを使用して、2 つを区別する必要があります。KeyDown イベントは、仮想キーを提供します。KeyPress イベントは、仮想キーがユーザーの好みのキーボード レイアウトによって変換された後に生成される入力文字を提供します。仮想キーではなく文字のみに関心があるため、KeyPress を使用する必要があります。それを抑制するには、e.Handled = true を設定します。

于 2012-04-19T21:44:22.370 に答える
3

これを使用して から に変換Keyscharます。

KeysConverter kc = new KeysConverter();
char c = Convert.ToChar(kc.ConvertToString(Keys.Left))));
于 2012-04-19T21:25:24.547 に答える
0

KeyPress イベントの代わりに、KeyDown イベントを試してください。これは、探している KeyEventArgs を使用します。

textBox1.KeyDown += new KeyEventHandler(textBox1_KeyDown);

void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
      if (e.KeyCode == Keys.Right)
      {
        //Do Something
      }
    }
于 2012-04-19T21:38:06.097 に答える