ProcessCmdKey方法 DataGridView按Enter回車鍵轉到下一列的格
使用DataGridView的時候經常需要修改其預設的操作方式,如按Enter回車鍵轉到下一列的格,或直接把Enter當成是Tab鍵。這樣的需求,對於DataGridView來說是很簡單的。你需要做的就是重寫其ProcessCmdKey方法。另一種需求是當編輯的列是某種特定的DataGridViewColumn時,執行特殊的操作。這個過程中我們需要配合DataGridView的系統訊息與DataGridViewColumn的系統訊息來實現一定的功能。
1、將Enter鍵變成Tab鍵 這是一個比較符合普通使用者的操作習慣,對於操作DataGridView,使用ProcessCmdKey
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
base.ProcessCmdKey(ref msg, keyData);
int WM_KEYDOWN = 256;
int WM_SYSKEYDOWN = 260;
bool _disable = false;
if (msg.Msg == WM_KEYDOWN || msg.Msg == WM_SYSKEYDOWN)
{
switch (keyData)
{
case Keys.Enter:
SendKeys.Send("{Tab}");
_disable = true;
break;
}
}
return _disable;
}
SendKeys.Send
上面的方法意思是當傳送的系統訊息是WM_KEYDOWN, WM_SYSKEYDOWN,敲擊的是Enter鍵,就取消這個訊息,併發送Tab訊息鍵。
2、DataGridViewComboBoxColumn的快速下拉 如果你剛剛開始使用DataGirdView,一定覺得ComboBox列好麻煩,如果當前是選定的,點選一下是開始編輯,再點選一下下列小箭頭才是下列動作,再選擇項。 假設一下,如果可以這樣:使用者一按鍵盤就馬上下拉,然後是自動篩選,那可能是很好的功能(視不同人的操作習慣而定)。 這個需求是可以達到,在重寫
在ProcessCmdKey重寫時,一捕捉到A-Z按鍵,就Disabled它併發送F2鍵,F2鍵是插入操作符,並需要重定義EditingControl控制元件,增加OnKeyUp的重寫,再判斷A-Z的操作,併發送F4鍵,F4是下拉指令鍵。其實,也可以直接在ProcessCmdKey傳送F2和F4,不過,過期使用ProcessCmdKey可能是比較麻煩的。