VS编程,WPF中响应键盘事件、检测键盘键是否按下的一种方法

键盘事件有四个,PreviewKeyDown、PreviewKeyUp、KeyDown、KeyUp,

在事件中,对参数e的Key属性进行判定。

这里以一个TextBox的文本控件为例。检测到回车键给予提示。

1、在键盘事件中,检测单个按键

1、前台增加文本控件并增加键盘事件 

VS编程,WPF中响应键盘事件、检测键盘键是否按下的一种方法_第1张图片

2、后台的键盘抬起事件中加入

           if (e.Key == Key.Enter)

            {
                MessageBox.Show("检测到回车键已按下");
            }

 像这样:

VS编程,WPF中响应键盘事件、检测键盘键是否按下的一种方法_第2张图片

同理,如果响应其它的键盘按键,在Key后面点  .  选择其它的键值。

 

 

2、在键盘事件中,响应组合键盘(两个或者两个以上)

这里以Ctrl + S为例

  1. 前台定义键盘事件
  2. 后台在事件中加入代码

 有两种写法:

第一种: 

1、同时按下了Ctrl + S键

2、修饰键只能按下Ctrl,如果还同时按下了其他修饰键,则不会进入

 

            if (e.KeyboardDevice.Modifiers == ModifierKeys.Control && e.Key == Key.S)
            {
                MessageBox.Show("检测到Ctrl、S已按下");
            }

     

第二种: 

1、同时按下了Ctrl + S键

2、修饰键只要按下Ctrl,不管是否还同时按下了其他修饰键,都会进入

 

  if (e.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Control) && e.Key == Key.H)
  {
   
    MessageBox.Show("检测到Ctrl、S已按下");

  }

 

其中 ModifierKeys.Control后面的Control可换成其它四个

       VS编程,WPF中响应键盘事件、检测键盘键是否按下的一种方法_第3张图片

 3、在非键盘事件中(也可在键盘事件中),检测单个或者多个键盘值

利用Keyboard类的静态方法IsKeyDown,完全脱离事件参数e,来检测判、断键盘按键

 

这种方式可以在任何事件中去检测多个组合按键或者单个按键。

            if (Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.LeftShift ) && Keyboard.IsKeyDown(Key.S))
            {
                //只要当下同时按下的键中包含LeftCtrl、LeftShift 和S ,就会进入
            }

4、对于具有开关性质的按键,比如大小写、数字键盘等键值状态判定

 这里以数字键盘是否打开为例:

            if (KeyStates.Toggled == Keyboard.GetKeyStates(Key.NumLock))
            {


            }

     判定左边为一个具体的状态,包括按下(Down)、打开(Toggled)、未打开(None)三种状态

     判定的右边为要检测的键值

 

你可能感兴趣的:(C#)