自定義控件里的keydown方法無法捕獲所有的按鍵消息的處理方法1(自定義控件里的keydown方法無法獲取的鍵值如上下左右鍵等)
處理辦法具體如下:
1、首先在自定義控件UserControl1中重寫ProcessDialogKey方法
?自定義控件UserControl1中重寫ProcessDialogKey方法代碼如下:? ? ? ?
? protected override bool ProcessDialogKey(Keys keyData)
? ? ? ? {
? ? ? ? ? ? if (keyData == Keys.Space || keyData == Keys.Up?
? ? ? ? ? ? ? ? || keyData == Keys.Down || keyData == Keys.Left?
? ? ? ? ? ? ? ? || keyData == Keys.Right)?
? ? ? ? ? ? {
? ? ? ? ? ? ? ? MessageBox.Show(keyData.ToString(), "提示");
? ? ? ? ? ? ? ? //SendKeys.Send(keyData.ToString());
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }
? ? ? ? ? ? return base.ProcessDialogKey(keyData);
? ? ? ? }
這時自定義控件里的keydown事件里面就可以獲得上下左右鍵了
代碼如下:
?private void UserControl1_KeyDown(object sender, KeyEventArgs e)
? ? ? ? {
? ? ? ? ? ? MessageBox.Show("提示11111111", e.KeyCode.ToString() + e.KeyData.ToString() + e.KeyData.ToString());
? ? ? ? }
2、如果新建窗體TestForm添加自定義控件UserControl1,想在窗體中響應TestForm窗體的TestForm_KeyDown事件,那又該怎么辦呢???
繼續往下看,步驟3中設置TestForm窗體的KeyPreview的屬性為true屬性即可
3、設置TestForm窗體的KeyPreview的屬性為true(這個至關重要!!!)
然后TestForm窗體的TestForm_KeyDown事件就可以獲取鍵值了
代碼如下
? ? ? ?private void TestForm_KeyDown(object sender, KeyEventArgs e)
? ? ? ? {
? ? ? ? ? ? MessageBox.Show("提示", e.KeyCode.ToString());
? ? ? ? }
?