zoukankan      html  css  js  c++  java
  • WPF

    • 对于键盘事件PreviewKeyDown、PreviewKeyUp、KeyDown、KeyUp,在其中检查当次事件是哪个按键触发的很简单,只需要判断KeyEventArgs类型的事件参数e的Key属性。
    • 如果需要判断修饰键(Alt、Ctrl、Shift)是否同时被按下,以Window.KeyDown事件为例,有两种写法:
    private void Window_KeyDown(object sender, KeyEventArgs e)
    {
      if (e.KeyboardDevice.Modifiers == ModifierKeys.Control && e.Key == Key.H)
      {
        //同时按下了Ctrl + H键(H要最后按,因为判断了此次事件的e.Key)
        //修饰键只能按下Ctrl,如果还同时按下了其他修饰键,则不会进入
      }
    }
    private void Window_KeyDown(object sender, KeyEventArgs e)
    {
      if (e.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Control) && e.Key == Key.H)
      {
        //同时按下了Ctrl + H键(H要最后按,因为判断了此次事件的e.Key)
        //修饰键只要按下了Ctrl,不管按没按其他修饰键,都会进入
      }
    }

          其中的e.KeyboardDevice.Modifiers,可以用Keyboard.Modifiers(Keyboard类的静态属性)来替换。

    • 另外,也可以利用Keyboard类的静态方法IsKeyDown,完全脱离事件参数e,来监听判断键盘按键(推荐)
    if (Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.H) && Keyboard.IsKeyDown(Key.C))
    {
      //只要当下同时按下的键中包含LeftCtrl、H和C,就会进入
    }

          这种方式可以在任何时刻,检测多个组合按键(不一定是修饰键),并且对按键顺序和最后按的是哪个键没有要求。

    • 但是,以上方法有使用前提,都只在当前窗体获得焦点时有效。

          如果焦点在别的窗体上,或者用户切换到别的应用程序时,则只好利用C#的平台调用功能,调用操作系统底层的dll,来进行监听了。

  • 相关阅读:
    java线程池
    缓存命中
    dubbo面向服务使用
    ActiveMQ
    创建证书
    struts2的运行原理以及底层的工作机制
    jdbc,mybatis,hibernate各自优缺点及区别
    struts2与springmvc的区别
    linux vi 命令编辑操作
    Linux FTP基本操作命令 ( 序列二 ftp)
  • 原文地址:https://www.cnblogs.com/MrEggplant/p/5780753.html
Copyright © 2011-2022 走看看