2011-08-18 39 views
0

我使用CheckedListBox作爲自定義DataGridView單元類編輯模式的基礎。我想在用戶按下退出鍵時關閉編輯。如果用戶沒有選擇任何重寫OnKeyDown完美的作品。問題是如果他們做OnKeyDown(和OnKeyPressed)不被CheckedListBox觸發;而是行項目取消選擇並吃掉事件。這意味着如果用戶通過單擊列表中的任何項目進行選擇,則需要按兩下退出才能關閉編輯。一個取消選擇他們點擊的行,另一個取消編輯模式。在選擇列表框項目時獲取CheckedListBox控件中的關鍵事件

回答

0

爲了訪問ESC鍵,我不得不改變IDataGridViewEditingControl.EditingControlWantsInputKey(IsInputKey對正常對照當量)的行爲傳遞逃避我的onkeydown事件。

/// <summary> 
/// Implements the IDataGridViewEditingControl.EditingControlWantsInputKey method. 
/// </summary> 
/// <param name="key"></param> 
/// <param name="dataGridViewWantsInputKey"></param> 
/// <returns></returns> 
public bool EditingControlWantsInputKey(Keys key, bool dataGridViewWantsInputKey) 
{ 
    // Let the custom edit control handle the keys listed. 
    switch (key & Keys.KeyCode) 
    { 
     case Keys.Escape: 
      return true; 
     default: 
      return !dataGridViewWantsInputKey; 
    } 
} 
2

嘗試覆蓋自定義DataGridView本身的IsInputKey,如果它是[Esc]則返回false,因此網格忽略Esc。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.isinputkey.aspx

你可以只忽略,如果沒有什麼在「編輯模式」或類似的inputKey也許enhave此行爲。

+0

我試着覆蓋這個在我的CellEditControl上,但改變它返回true而不是false當按下轉義鍵時仍然不讓它到達CellEditControl的KeyDownEvent。 –

+0

從IsInputKey()中明確調用OnKeyDown()來實現我想要的;但是啊,這是一個討厭的雜食。 –

+0

原來問題出在'IDataGridViewEditingControl.EditingControlWantsInputKey'我根本就不需要去觸及IsInputKey,因爲這個方法可以讓你做同樣的事情,並在之後解僱我試圖做的變化isInputKey –

相關問題