2017-03-07 5 views
0

ALT + 1〜ALT + 9のホットキーを検出しようとしていますが、ALTを押すとKey.Systemとして入力されます。 CTRL + NumPad0を押すと、正しいKey.NumPad0になります。Keys.Numpad0は、Altキーを押したときにKeys.Systemとして入力されます。

ALTによる
private void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    bool isAlt = Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt); 
    bool isCtrl = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl); 

    string ctrlMod = string.Empty; 

    if (isAlt) 
    { 
     ctrlMod = "alt + " + e.Key.ToString(); 
    } 

    if (isCtrl) 
    { 
     ctrlMod = "ctrl + " + e.Key.ToString(); 
    } 

    Debug.WriteLine("Key is " + ctrlMod); 
} 

ALT + NumPad0 + NumPad9は生成します。

キーは、Ctrlキーを押しながらキーがCTRL + NumPad1
キーがCTRLである適切

働くALT +システム

です+ NumPad2
キーはCtrl + NumPad3

+0

それはWindowsのAltキーコードとは何かを持っているかもしれません – maccettura

+0

https://social.msdn.microsoft.com/Forums/vstudio/en-US/4355ab9a-9214-4fe1-87ea-b32dfc22946c/issue-with-alt-key-and-key-down-event?for um = wpf – maccettura

答えて

1

を使用して、それを回避することができます:

private void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (Keyboard.Modifiers == ModifierKeys.Alt) 
    { 
     string ctrlMod = "alt + " + e.SystemKey.ToString(); 
     Debug.WriteLine("Key is " + ctrlMod); 
    } 
} 

private void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    bool isAlt = Keyboard.Modifiers == ModifierKeys.Alt; 
    bool isCtrl = Keyboard.Modifiers == ModifierKeys.Control; 

    string ctrlMod = string.Empty; 

    if (isAlt) 
    { 
     ctrlMod = "alt + " + e.SystemKey.ToString(); 
    } 

    if (isCtrl) 
    { 
     ctrlMod = "ctrl + " + e.Key.ToString(); 
    } 

    Debug.WriteLine("Key is " + ctrlMod); 
} 
0

私はmaccetturaが正しいと思い、「Windows Alt Codes」と関係していると思います。私はあなたがALT+9を通じてALT+1を検出するKeyboard.ModifiersKeyEventArgs.SystemKeyプロパティを使用することができます

if (Keyboard.IsKeyDown(Key.NumPad0)) { } 
関連する問題