0

コントロールで KeyUp イベントが発生したときに呼び出すメソッドがあり、そのメソッド内で、char.IsLetterOrDigit メソッドを使用して、押されたキーが文字または数字であることを確認します。しかし、キーパッドの数字ではうまくいかないようです!?

私のコードは以下の通りです:

    void MyControls_KeyUp(object sender, KeyEventArgs e)
    {
        if ((char.IsLetterOrDigit(Convert.ToChar(e.KeyValue))))
        {
            ....
        }
    }

これがうまくいかない理由は誰にもありますか?

前もって感謝します。

私はC#4.0を使用しています

4

3 に答える 3

4

あなたは自分がしていると思うことをしていません。

Convert.ToChar()キーボードコードを取得して、そのキーが表す文字に変換するつもりはありません。キーボード レイアウト、文化、キー修飾子の状態などが異なるため、これを行うにはあまりにも多くの作業が必要です。ここで行っているのは、KeyCode 列挙の数値を取得し、それを にキャストすることcharです。

KeyPressキーの押下に関連付けられた文字を取得する場合は、イベントではなくイベントをオーバーライドする必要がありますKeyUp。Windows フォームは、キーに対応する文字を判別するために必要なすべての変換と変換を行います。

于 2012-08-21T14:21:54.580 に答える
1

KeyUp を使用すると、キーボードのすべてのボタンを処理できます (Function や数字パッドなどの特殊キーを含む)。ただし、KeyValue または KeyCode は、押されたボタンの文字を常に参照するとは限りません。

KeyPress は、押されたボタンの文字を表示しますが、特殊キー (numlock がオフの場合のテンキーを含む) は処理しません。

キーボードのすべてのキーを処理したい場合は、KeyUp を使用します。e.KeyValue は Keys 列挙型の値を返します (つまり、テンキー 0 は Keys.NumPad0 です)。入力された値を処理するだけの場合は、KeyPress を使用します。

于 2012-08-21T14:25:57.110 に答える
1

これを試して :

if (e.KeyCode == Keys.NumPad0)
        {
            // your code
        }
        // else for other numpad keys
于 2012-08-21T14:26:51.913 に答える