winform中键盘和鼠标事件的捕捉和重写(转)
在 編寫winform應(yīng)用程序時,有時需要無論在哪個控件獲取焦點時,對某一個鍵盤輸入或者鼠標事件都進行同樣的操作。比如編寫一個處理圖片的應(yīng)用程序時, 希望無論當(dāng)前哪個控件獲得焦點,當(dāng)用戶按上、下、左、右鍵時,圖片控件的滾動條都會上下左右移動,當(dāng)用戶撥動鼠標滾輪時圖片總能發(fā)大或縮小。如果對每個控 件的鍵盤或鼠標事件都進行設(shè)置,必然會造成很多的重復(fù)工作。本文我將介紹如何在winform下對某一個鍵盤輸入或者鼠標事件進行相同的操作。
1、鍵盤事件的捕捉和重寫
首先是鍵盤操作,為了實現(xiàn)上述功能,現(xiàn)在介紹winform的一個方法。ProcessCmdKey.其msdn說明的地址為:msdn
ProcessCmdKey介紹
從函數(shù)名就可以看出,這其實是設(shè)置winform的快捷鍵的函數(shù)。
“在消息預(yù)處理過程中調(diào)用此方法,以處理命令鍵。命令鍵是始終比常規(guī)輸入鍵具有優(yōu)先權(quán)的鍵。命令鍵的示例包括快捷鍵和菜單快捷方式。此方法必須返回true,以指示它已經(jīng)處理完命令鍵,或者false,以指示該鍵不是命令鍵。僅當(dāng)控件承載在
Windows 窗體應(yīng)用程序中或充當(dāng) ActiveX 控件時,才調(diào)用此方法。”
上述是msdn對該函數(shù)的介紹。其意思是,在該函數(shù)中定義的鍵 盤操作響應(yīng)事件具有最高的優(yōu)先權(quán),會在所有的鍵盤響應(yīng)時間之前執(zhí)行。如果想在執(zhí)行完該事件之后執(zhí)行與該鍵盤輸入相關(guān)的事件則返回false(即認為該輸入 事件未處理),如果要屏蔽其它響應(yīng)時間則返回true(即告訴應(yīng)用程序這個鍵盤輸入我已經(jīng)處理過了,后面就不要再處理了)。
因此有了這個函數(shù)就可以很好的屏蔽程序中的其他鍵盤輸入響應(yīng)事件,從而自己定義對每個鍵盤輸入的響應(yīng)。
下面給一個實例:
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應(yīng)用程序的窗體類中,然后替換MessageBox為自己想要實現(xiàn)的功能即可。
2、對于鼠標的事件,有上述要求的主要是鼠標的滾輪滾動事件。因為鼠標的點擊雙擊移動等事件都是與鼠標指針指向有關(guān)的,沒有必要對所有的都 執(zhí)行相同的操作,只有鼠標滾輪事件與當(dāng)前鼠標指針的指向的關(guān)系不大,對其執(zhí)行相同的操作有一定的實際意義。正如前面所說的在處理圖片的應(yīng)用程序中可能需要 無論在何種情況下,鼠標滾輪下?lián)芏紝?yīng)著放大圖片,而上滾都對應(yīng)著縮小圖片。
對于這個功能要求采用的是鼠標事件委托
具體操作為在窗體初始化的時候?qū)⑹髽藵L輪事件委托到一個自定義函數(shù)上,代碼如下:
public Form1(){InitializeComponent();this.MouseWheel+= new MouseEventHandler(MyMouseWheel);}其中第二句語句的意思是將這個程序的鼠標滾輪事件綁定到MyMouseWheel這個函數(shù)上,然后后續(xù)自己定義一個MyMouseWheel的函數(shù)即可
我定義的MyMouseWheel函數(shù)如下:
?private void MyMouseWheel(object sender, System.Windows.Forms.MouseEventArgs e){if (e.Delta > 0){MessageBox.Show("滾輪向前滾動");}else{MessageBox.Show("滾輪向后滾動");}}在具體應(yīng)用中將MessageBox替換為要實現(xiàn)的功能即可。
轉(zhuǎn)載于:https://www.cnblogs.com/candyzhmm/p/5661434.html
總結(jié)
以上是生活随笔為你收集整理的winform中键盘和鼠标事件的捕捉和重写(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java json.stringify_
- 下一篇: JavaScript this 关键字