关于捕获键盘信息的processDialogkey方法
在一些控件里的keydown方法,沒有辦法捕獲所有的按鍵消息
比如自己寫一個窗體控件庫,繼承了UserControl
但是沒有辦法捕獲一些鍵,比如方向鍵等
所以必須重載 processDialogkey 方法
processDialogkey 的描述 在msdn中是這樣的
?
在消息預處理過程中調用此方法,以處理對話框字符,比如 Tab、Return、Esc 和箭頭鍵。只有當?IsInputKey?方法指示控件未在處理該鍵時,才調用此方法。ProcessDialogKey?方法只是將字符發送給父級的ProcessDialogKey?方法,或者,在該控件沒有父級的情況下返回?false。Form?類重寫此方法來執行對話框鍵的實際處理。僅當控件承載在 Windows 窗體應用程序中或充當 ActiveX 控件時,才調用此方法。
給繼承者的說明?在派生類中重寫?ProcessDialogKey?方法時,控件應返回?true?以指示它已處理該鍵。對于未由該控件處理的鍵,應返回調用基類的?ProcessDialogChar?方法所得的結果。控件很少需要重寫此方法(即使有的話)。
?
它的返回值表示
返回值
如果鍵已由控件處理,則為?true;否則為?false。
?
所以想捕獲方向鍵 要加上如下重載方法
?
protected override bool ProcessDialogKey(Keys keyData)
??????? {
??????????? if (keyData == Keys.Up || keyData == Keys.Down || keyData == Keys.Left || keyData == Keys.Right)
??????????????? return false;
??????????? else
??????????????? return base.ProcessDialogKey(keyData);
??????? }
?
在keydown里就能接收到方向鍵的信息了
?
其實,在ProcessDialogKey重寫的時候,就可以做信息處理的操作了
而不必再keydown方法里寫
?
這樣也可以
namespace writing
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == (Keys.Insert | Keys.Shift))
{
IDataObject data = Clipboard.GetDataObject();
string text = (string)data.GetData(DataFormats.UnicodeText);
MessageBox.Show(text);
}
return base.ProcessDialogKey(keyData);
}
}
}
轉載于:https://www.cnblogs.com/1175429393wljblog/p/5106500.html
總結
以上是生活随笔為你收集整理的关于捕获键盘信息的processDialogkey方法的全部內容,希望文章能夠幫你解決所遇到的問題。