1. 程式人生 > >VS程式設計,WPF中響應鍵盤事件、檢測鍵盤鍵是否按下的一種方法

VS程式設計,WPF中響應鍵盤事件、檢測鍵盤鍵是否按下的一種方法

鍵盤事件有四個,PreviewKeyDown、PreviewKeyUp、KeyDown、KeyUp,

在事件中,對引數e的Key屬性進行判定。

這裡以一個TextBox的文字控制元件為例。檢測到回車鍵給予提示。

1、在鍵盤事件中,檢測單個按鍵

1、前臺增加文字控制元件並增加鍵盤事件 

2、後臺的鍵盤擡起事件中加入

           if (e.Key == Key.Enter)

            {
                MessageBox.Show("檢測到回車鍵已按下");
            }

 像這樣:

同理,如果響應其它的鍵盤按鍵,在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可換成其它四個

       

 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)三種狀態

     判定的右邊為要檢測的鍵值