程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WPF 捕獲鍵盤輸入事件,wpf捕獲鍵盤輸入

WPF 捕獲鍵盤輸入事件,wpf捕獲鍵盤輸入

編輯:關於.NET

WPF 捕獲鍵盤輸入事件,wpf捕獲鍵盤輸入


最近修改的一個需求要求捕獲鍵盤輸入的 Text,包括各種標點符合。

最開始想到的是 PreviewKeyDown 或者 PreviewKeyUp 這樣的鍵盤事件。

但是這兩個事件的對象 KeyEventArgs 不夠用,得依靠判斷 Key 來判斷輸入了什麼,然後再根據判斷寫死一個相應鍵位的 Text 來獲取數據。

如組合鍵獲取 乘號鍵 需要用到 Shift + 8(數字鍵盤那的乘號鍵是 Key.Multiply ,而需要在主鍵盤位獲取則需要用到組合鍵)

1 private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
2 {
3    if(e.KeyStates == Keyboard.GetKeyStates(Key.D8) && Keyboard.Modifiers == ModifierKeys.Shift)
4    {
5        var input = "*";
6    }
7 }

這種辦法既不友好且需要用到其他標點符號時還得另外加 if 條件,而且會發生 Key 沖突的問題,如上你輸入完 乘號鍵 以後可能還會多加一個“8”,由於 Key.D8 的原因

 

隨後花了點時間找了下國外博客,然後發現了這個文章(引用1),其實文章內的解決方案博客園也能找到幾篇,但是不詳細一筆帶過。

這是我根據文章內寫的代碼

XAML:

1 <Window x:Class="Dome.MainWindow"
2     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4     PreviewTextInput="Window_PreviewTextInput"
5     Height="400" 
6     Width="600"
7     MinWidth="600">
8 </Window>

C#:

1 private void Window_PreviewTextInput(object sender, TextCompositionEventArgs e)
2 {
3    var input = e.Text;
4 }

 

引用

http://stackoverflow.com/questions/2924928/wpf-previewkeydown-event-and-underscore-char

 

總結

關於PreviewKeyDown和KeyDown的區別園區裡也有很多相關的文章,以後我也將會寫一個,畢竟我也碰到過這個坑...

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved