7

caplockの有無にかかわらず、キーボードでキーを押したい:

private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
   e.Key.ToString();
}

キーボードで「a」または「A」と入力すると、e.Key の結果は常に「A」になります。「a」と入力して「a」を取得するにはどうすればよいですか?

4

5 に答える 5

6

Control.IsKeyLockedメソッドを使用して、KeyDownイベントCAPS lockがオンかオフかを確認できます。また、ユーザーが次のような列挙型を使用して識別できるキーを使用して大文字で入力したかどうかを確認する必要がある場合があります-ShiftModifiers

private void Window_KeyDown(object sender, KeyEventArgs e)
{
   string key = e.Key.ToString();
   bool isCapsLockOn = System.Windows.Forms.Control
                        .IsKeyLocked(System.Windows.Forms.Keys.CapsLock);
   bool isShiftKeyPressed = (Keyboard.Modifiers & ModifierKeys.Shift)
                                == ModifierKeys.Shift;
   if (!isCapsLockOn && !isShiftKeyPressed)
   {
      key = key.ToLower();
   }
}
于 2012-10-14T07:46:40.200 に答える
6

KeyDownイベントはご利用いただけません。TextInputイベントを使用する必要があります。これにより、元の文字とそのキャプション(大文字/小文字)が印刷されます。

    private void Window_TextInput(object sender, TextCompositionEventArgs e)
    {
        Console.WriteLine(e.Text);
    }

これで、Shiftキーを押すと、Shiftキーなども出力されます。これらの修飾子が必要ない場合は、文字列の最後の項目を取得するだけです-char配列として扱います;)-

于 2012-09-25T22:22:40.813 に答える
5

TextInput / PreviewTextInputのオーバーライド(またはイベントのリッスン)が機能するはずです。

protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
    base.OnPreviewTextInput(e);
    Console.WriteLine(e.Text);
}
于 2012-10-07T23:53:42.017 に答える
2

KeyEventArgs クラスには、SHIFT キーが押されたかどうかを示す「Shift」フィールドがあります。

それ以外の場合、CAPS_LOCK が押されたときに Window_KeyDown メソッドが呼び出されるため、CAPS_LOCK キーが押されたかどうかを示すブール値を保存できます。

    bool isCapsLockPressed;
    private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) {
           if(e.KeyCode == Keys.CapsLock) {
               isCapsLockPressed = !isCapsLockPressed;
           }
    }
于 2012-10-09T04:26:42.157 に答える
0

これを処理する最良の方法は、KeyDownではなくWindow_TextInputイベントを使用することです。

しかし、あなたが言ったように、このイベントはあなたのアプリケーションで発生しません、あなたはむしろこのようなハックを使うことができます:

bool iscapsLock = false;
bool isShift = false;
private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.CapsLock)
        iscapsLock = !iscapsLock;

    if (e.Key >= Key.A && e.Key <= Key.Z)
    {
        bool shift = isShift;
        if (iscapsLock)
            shift = !shift;
        int s = e.Key.ToString()[0];
        if (!shift)
        {
            s += 32;
        }
        Debug.Write((char)s);
    }

}

これにより、capslockがオンになっているかどうかに基づいて文字が正しく印刷されます。Capslockの初期値は、次のリンクを使用して取得できます。

http://cboard.cprogramming.com/csharp-programming/105103-how-detect-capslock-csharp.html

これがあなたのために働くことを願っています。

于 2012-10-13T21:32:44.477 に答える