web-dev-qa-db-ja.com

WPFで修飾キーの状態を検出する方法は?

Control、Shift、Altボタンが押されているかどうかにアクセスする必要があるときにいつでも使用できるグローバルコンストラクトはありますか?たとえば、MouseDownTreeViewイベント内。

もしそうならどのように?

131
Joan Venge

クラス Keyboard を使用します。 Keyboard.IsKeyDown を使用すると、Control、Shift、Altがダウンしているかどうかを確認できます。

シフトの場合:

if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
{ /* Your code */ }

コントロール用:

if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{ /* Your code */ }

Altの場合:

if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
{ /* Your code */ }
223
Kyrylo M

またあります:

// Have to get this value before opening a dialog, or user will have released the control key
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{

}
110
Chuck Savage
    private bool IsShiftKey { get; set; }

    private void OnPreviewKeyDown(object sender, KeyEventArgs e)
    {
        IsShiftKey = Keyboard.Modifiers == ModifierKeys.Shift ? true : false;

        if ((Key.Oem3 == e.Key || ((IsShiftKey && Key.Oem4 == e.Key) || (IsShiftKey && Key.Oem6 == e.Key) || (IsShiftKey && Key.Oem5 == e.Key)) && (validatorDefn as FormatValidatorDefinition).format == "packedascii"))
        {
           e.Handled = true;
        }
    }
8
Krushik

これは私がそれを処理する方法です(PreviewKeyDownを使用して)、Alt + Rを探しているとしましょう...

private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
    if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)
       && e.SystemKey == Key.R)
    {
       //do whatever
    }
}

たぶん、修飾子のために、e.Keyだけでなくe.SystemKeyを使用しなければならなかった理由を誰かが明確にすることができますか?しかし、これは修飾キーとキーを検索するときに私にとって完璧に機能しました。

2
Josh

同様に:

my.Computer.Keyboard.ShiftKeyDown then ...

My.Computer.Keyboard.CtrlKeyDown

My.Computer.Keyboard.AltKeyDown

0
Rob