winform中鍵盤和鼠標事件的捕捉和重寫(轉)

在 編寫winform應用程序時,有時需要無論在哪個控件獲取焦點時,對某一個鍵盤輸入或者鼠標事件都進行同樣的操作。比如編寫一個處理圖片的應用程序時, 希望無論當前哪個控件獲得焦點,當用戶按上、下、左、右鍵時,圖片控件的滾動條都會上下左右移動,當用戶撥動鼠標滾輪時圖片總能發大或縮小。如果對每個控 件的鍵盤或鼠標事件都進行設置,必然會造成很多的重復工作。本文我將介紹如何在winform下對某一個鍵盤輸入或者鼠標事件進行相同的操作。

1、鍵盤事件的捕捉和重寫

首先是鍵盤操作,為了實現上述功能,現在介紹winform的一個方法。ProcessCmdKey.其msdn說明的地址為:msdn
ProcessCmdKey介紹

從函數名就可以看出,這其實是設置winform的快捷鍵的函數。

在消息預處理過程中調用此方法,以處理命令鍵。命令鍵是始終比常規輸入鍵具有優先權的鍵。命令鍵的示例包括快捷鍵和菜單快捷方式。此方法必須返回true,以指示它已經處理完命令鍵,或者false,以指示該鍵不是命令鍵。僅當控件承載在
Windows 窗體應用程序中或充當 ActiveX 控件時,才調用此方法。”

上述是msdn對該函數的介紹。其意思是,在該函數中定義的鍵 盤操作響應事件具有最高的優先權,會在所有的鍵盤響應時間之前執行。如果想在執行完該事件之后執行與該鍵盤輸入相關的事件則返回false(即認為該輸入 事件未處理),如果要屏蔽其它響應時間則返回true(即告訴應用程序這個鍵盤輸入我已經處理過了,后面就不要再處理了)。

因此有了這個函數就可以很好的屏蔽程序中的其他鍵盤輸入響應事件,從而自己定義對每個鍵盤輸入的響應。

下面給一個實例:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData){switch (keyData){case Keys.Right:MessageBox.Show("Right");return true;case Keys.Left:MessageBox.Show("Left");return true;case Keys.Up:MessageBox.Show("up");return true;case Keys.Down:MessageBox.Show("down");return true;case Keys.Space:MessageBox.Show("space");return true;case Keys.Enter:MessageBox.Show("enter");return true;}return false;}

在實際程序中,只需要將上述代碼加入winform應用程序的窗體類中,然后替換MessageBox為自己想要實現的功能即可。

2、對于鼠標的事件,有上述要求的主要是鼠標的滾輪滾動事件。因為鼠標的點擊雙擊移動等事件都是與鼠標指針指向有關的,沒有必要對所有的都 執行相同的操作,只有鼠標滾輪事件與當前鼠標指針的指向的關系不大,對其執行相同的操作有一定的實際意義。正如前面所說的在處理圖片的應用程序中可能需要 無論在何種情況下,鼠標滾輪下撥都對應著放大圖片,而上滾都對應著縮小圖片。

對于這個功能要求采用的是鼠標事件委托

具體操作為在窗體初始化的時候將鼠標滾輪事件委托到一個自定義函數上,代碼如下:

public Form1(){InitializeComponent();this.MouseWheel+= new MouseEventHandler(MyMouseWheel);}

其中第二句語句的意思是將這個程序的鼠標滾輪事件綁定到MyMouseWheel這個函數上,然后后續自己定義一個MyMouseWheel的函數即可

我定義的MyMouseWheel函數如下:

?private void MyMouseWheel(object sender, System.Windows.Forms.MouseEventArgs e){if (e.Delta > 0){MessageBox.Show("滾輪向前滾動");}else{MessageBox.Show("滾輪向后滾動");}}

在具體應用中將MessageBox替換為要實現的功能即可。

轉載于:https://www.cnblogs.com/candyzhmm/p/5661434.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271388.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271388.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271388.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

redisTemplate獲得key的過期時間方法

/** * 從redis中獲取key對應的過期時間; * 如果該值有過期時間,就返回相應的過期時間; * 如果該值沒有設置過期時間,就返回-1; * 如果沒有該值,就返回-2; */ redisTemplate.opsForValue().getOperations().getExpire("key的名稱")

2020年“1024”,程序員日

1024程序員日向可愛的程序員致敬隨著時代的發展,大數據技術行業發展愈趨成熟,堅持自己對知識、技術和創新追求的程序員層出不窮。相信很多人都不知道,其實,程序員也有他們自己專屬的節日: 程序員日。每個節日都有自己的來歷和含義…

小程序內嵌h5頁面分享_微信小程序webview內頁面分享

因為項目原因,之前在微信小程序內部使用 webview 嵌套了 h5 頁面,現在要添加一個新的功能,用戶在哪個頁面進行了分享,被分享的用戶從鏈接進來就跳轉到哪個分享頁面。先了解一下 web-view 組件的限制,web-view 是承載網…

shell shift與{}_一文掌握shell腳本中shift的用法及功能

概述今天主要介紹下shell腳本中shift的一些用法,這個命令還是相對比較少見的。一、shift介紹shift命令用于對參數的移動(左移),通常用于在不知道傳入參數個數的情況下依次遍歷每個參數然后進行相應處理(常見于Linux中各種程序的啟動腳本)。簡而言之&…

redisTemplate設置key零點過期,生成自增的單號

public String getId() {String key "finance:funs:code";Long incr getIncr(key);if (incr 0) {incr getIncr(key);//從0001開始}DecimalFormat df new DecimalFormat("0000");//四位序列號String format df.format(incr);return format;}public Lo…

docker log 文件 清理

1 查看docker log 文件位置 docker inspect *** 2 定時清理 truncate -s 0 /var/lib/docker/containers/*/*-json.log docker 日志管理 https://docs.docker.com/engine/admin/logging/json-file/ 全局配置 默認位置 /etc/docker/daemon.json 由dockerd 啟動參數 --config-fi…

計算機網絡基礎:常見的網絡傳輸介質

傳輸介質是信號傳遞的媒體,常用的網絡傳輸介質包括有線介質(雙絞線、同軸電纜、光纖等)和無線介質(微波、紅外線、激光等)。 1、雙絞線 雙絞線是目前最普遍的傳輸介質,分為兩類:屏蔽雙絞線&…

json為全局變量 vue_vue 設置全局變量、指定請求的 baseurl

一. 基本環境前端vue:2.5.6axios:0.18使用vue腳手架構建項目。參照:webstorm搭建vue項目后臺ssm框架前后端數據采用json格式傳輸二. 前端配置axios配置1.安裝:npm install axios --save2.在所需組件中引入axios:import…

java 多項式擬合最多的項數_Matlab概率統計與曲線擬合

一、二項分布二項分布來源于伯努利試驗 (事件發生概率 ) :含義為獨立重復N次試驗后, 事件總共發生k次的概率分布函數 二項分布記為 binopdf 獲得事件共發生次的概率 binocdf 為事件最多發生次的概率 binornd 將生成一個服從二項分布 規模為 的隨機矩陣二項分布的數字特征…

mysql -- MAC下安裝配置mysql

1:進入官網,鏈接是 https://dev.mysql.com/downloads/mysql/ 點擊第一個dmg文件,download 2:點擊 No thanks, just start my download. 3:下載到本地到dmg文件 4:安裝MySQL,雙擊 mysql.dmg 文件,進行安裝。 注意:安裝…

負載均衡配置與使用

Nginx負載均衡的理解 Nginx是一個輕量級的、高性能的WebServer,他主要可以干下面兩件事: 作為http服務器(和apache的效果一樣) 作為反向代理服務器實現負載均衡 現在Nginx到處都可以見到,經常會看到宕機后的網頁會顯示…

計算機網絡基礎:網絡分類和拓撲結構知識筆記

???????1、計算機網絡分類 城域網、廣域網、局域網網對比 網絡分類 縮寫 分布距離 計算機分布范圍 傳輸速率范圍 局域網 LAN 10、100、1000m左右 房間、樓寓、校園 4Mb/s- 1Gb/s 城域網 MAN 10KM左右 城市 50Kb/s-100Mb/s 廣域網 WAN 100KM左右 國家或…

php發送數據到視圖格式_PHP-FPM的相關知識的深度解釋

一、需要搞清楚幾個名詞概念1. CGI(Common Gateway Interface,CGI)通用網關接口, 是Web 服務器運行時外部程序的規范,按CGI 編寫的程序可以擴展服務器功能。CGI 應用程序能與瀏覽器進行交互,還可通過數據API與數據庫服…

stm32超聲波測距代碼_干貨!特斯拉Autopilot核心傳感器解讀超聲波雷達篇

加入高工智能汽車行業群(自動駕駛行業4群,車聯網智能座艙3群,智能商用車行業群),加微信:15818636852,并出示名片,僅限智能網聯汽車零部件及OEM廠商。目前為止,特斯拉的Autopilot一共經歷了三代硬…

記錄

https://xclient.info/ https://www.macbl.com/ https://www.macwk.com/

進階篇-安卓系統:2.多點觸控的交互處理

1.android 觸摸事件偵聽 安卓的用戶交互方式包括兩種,一種是點擊交互,一種是觸摸交互。點擊交互就是手指按下抬起一個動作組。而觸摸交互分為按下(down),移動(move),抬起&#xff08…

計算機網絡:網絡設備知識筆記

網絡設備是實現計算機網絡實現用戶通信和交互信息的硬件基礎。常用的網絡設備有中繼器、網橋、路由器、集線器等。 1、網絡傳輸介質互聯設備 網絡線路和用戶節點具體銜接時,需要網絡傳輸介質的互聯設備。比如T型頭(同軸電纜連接器)、收發器、…

執行git命令時提示秘鑰權限太開放‘Permissions 0644 for ‘/Users/liuml/.ssh/id_rsa_tz‘ are too open.’

執行git命令時提示秘鑰權限太開放‘Permissions 0644 for /Users/liuml/.ssh/id_rsa_tz are too open.’ 報錯如下 這個問題是由于 權限的問題,需要文件設置權限: chmod 600 *

eclipse折疊if語句塊_Python學習日志01判斷 if 語句

1.條件判斷語句(if語句)在python中,if語句就是用來進行判斷的,語法如下:語法:If 條件表達式:代碼塊執行的流程:if語句在執行時,會先對條件表達式進行求值判斷&#xff1b…

mysql怎么可視化連接_IDEA連接MySQL可視化工具連接操作

IDEA連接MySQL可視化工具連接操作入下所示:填寫完成后,點擊測試連接,連接成功如圖所示點擊OK即可報告錯誤(如圖所示):[08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up. java.ne…