WPF 捕獲鍵盤輸入事件

来源:http://www.cnblogs.com/SunsetAzure/archive/2016/12/27/6227864.html
-Advertisement-
Play Games

最近修改的一個需求要求捕獲鍵盤輸入的 Text,包括各種標點符合。 最開始想到的是 PreviewKeyDown 或者 PreviewKeyUp 這樣的鍵盤事件。 但是這兩個事件的對象 KeyEventArgs 不夠用,得依靠判斷 Key 來判斷輸入了什麼,然後再根據判斷寫死一個相應鍵位的 Text ...


最近修改的一個需求要求捕獲鍵盤輸入的 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的區別園區里也有很多相關的文章,以後我也將會寫一個,畢竟我也碰到過這個坑...


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 要對函數進行調試需要安裝插件pldbgapi,當初在windows上面的postgresql實例中執行了一下語句就安裝上了: create extension pldbgapi; 但是在linux中執行該語句時提示沒有這個文件,上網查了好幾個資料,使用德哥的方法。不過在實際操作中還是有出入,這裡做一 ...
  • 系統:centos6.6 下載google身份驗證包google-authenticator-master(其實只是一個.zip文件,在windwos下解壓,然後傳進linux) #cd /data/google-authenticator-master/libpam #yum install li ...
  • 第五節 遠程SSH連接服務與基本排錯 標簽(空格分隔):Linux實戰教學筆記 陳思齊 第1章 遠程連接LInux系統管理 1.1 為什麼要遠程連接Linux系統 ![屏幕快照 2016 12 25 下午10.04.28.png 633.3kB][1] 在實際的工作場景中,虛擬機界面或物理伺服器本地 ...
  • 做了一單片機設計,要用C語言與彙編語言同時實現,現將這次設計的感受和收穫,還有遇到的問題寫下,歡迎感興趣的朋友交流想法,提出建議。 單片機設計:基於51單片機的99碼表設計 軟體環境:Proteus8.0 + Keil4 要求:1,開關按一下,數位管開始計時。2,按兩下,數位管顯示靜止。3,按三下, ...
  • rotatelogs 是 Apache 2.2 中自帶的管道日誌程式,參數如下(參見:http://lamp.linux.gov.cn/Apache/ApacheMenu/programs/rotatelogs.html) 語法 rotatelogs [ l ] logfile [ rotation ...
  • 步驟:1. 掛在光碟 配置本地源; 2. 安裝redhat_lsb; 3. 安裝chrome 1 mount /dev/cdrom /mnt cd /etc/yum.repos.d/ vi local.repo (這裡要添加內容的: [local_cd] gpgcheck=0 enable=1 ba ...
  • 右擊開始->屬性->開始菜單->自定義>點擊運行命令(選擇)->確定 ...
  • Sciter中的Tiscript腳本不是標準的Javascript,是對Javascript的擴展。所以在常用的編輯器和IDE上對於高亮的支持很不好。 不過在Sciter論壇中找到了在VSCode上的高亮支持。安裝方法比較簡單。 首先點此下載插件。 之後在Sciter插件所在目錄執行 然後在VSCo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...