1. 程式人生 > >ProcessCmdKey方法 DataGridView按Enter回車鍵轉到下一列的格

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按鍵,並判斷當前的是不是ComboBoxColumn,不過DataGridViewComboBoxColumn需要重新定義,將它分柝為Column,CellEditingControl三個檔案。

ProcessCmdKey重寫時,一捕捉到A-Z按鍵,就Disabled它併發送F2鍵,F2鍵是插入操作符,並需要重定義EditingControl控制元件,增加OnKeyUp的重寫,再判斷A-Z的操作,併發送F4鍵,F4是下拉指令鍵。其實,也可以直接在ProcessCmdKey傳送F2F4,不過,過期使用ProcessCmdKey可能是比較麻煩的。