none
为什么在RichTextBox中KeyDown事件,不能处理Alt+S的情况? RRS feed

  • 问题

  • 代码:

                if (e.KeyboardDevice.Modifiers == ModifierKeys.Alt && e.Key == Key.S)
                    SendMessage();
    

    不知道为什么我按下ALT+S的时候,SendMessage代码没有执行,电脑传出”叮”一声。。。

    如果将Alt换成CTRL却可以,这是为什么?


    da jia hao!

    2017年8月18日 9:20

答案


  • Hi liubin,

    >>不知道为什么我按下ALT+S的时候,SendMessage代码没有执行,电脑传出”叮”一声。。。
    如果将Alt换成CTRL却可以,这是为什么?

    据我所致,在Alt修饰符的情况下,e.Key返回Key.System,真正的密钥在e.SystemKey中。 您可以使用以下代码来始终获得正确的按键:

      Key key = (e.Key == Key.System ? e.SystemKey : e.Key);

    你可以尝试下面的代码来捕获ALT组合事件

           private void HandleKeyDownEvent(object sender, KeyEventArgs e)
            {
                if (e.Key == Key.S && (Keyboard.Modifiers & (ModifierKeys.Control)) == (ModifierKeys.Control))
                {
                    e.Handled = true;
                    MessageBox.Show("Control + s trapped");
                }
                if ((Keyboard.Modifiers & (ModifierKeys.Alt)) == (ModifierKeys.Alt))
                {
                    Key key = (e.Key == Key.System ? e.SystemKey : e.Key);
                    if(key==Key.S)
                    {
                        e.Handled = true;
                        MessageBox.Show("Alt + s trapped");
                    }
                }
    
            }


    Best Regards,

    Yohann Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 liubin 2017年8月21日 9:20
    2017年8月21日 7:34
    版主