簡體   English   中英

按下ALT鍵時,Keys.Numpad0作為Keys.System進入

[英]Keys.Numpad0 comes in as Keys.System when ALT is pressed

我正在嘗試檢測ALT + 1到ALT + 9的熱鍵,但是當按ALT時,該鍵作為Key.System出現。 按下CTRL + NumPad0時,其鍵為Key.NumPad0,這是正確的。

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到ALT + NumPad9產生:

關鍵是alt +系統

Ctrl正常工作

鍵是ctrl + NumPad1
鍵是ctrl + NumPad2
按鍵是Ctrl + NumPad3

您可以使用Keyboard.ModifiersKeyEventArgs.SystemKey屬性來檢測ALT+1ALT+9

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);
}

我認為maccettura是正確的,並且與“ Windows Alt Codes”有關。 我可以使用解決它

if (Keyboard.IsKeyDown(Key.NumPad0)) { } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM