2013-10-28 103 views
2

我在Windows窗體應用程序中有一個自定義的DataGridView控件。當用戶按下Enter鍵時,我不希望發生任何事情。我已經重寫了我的自定義DataGridView中的OnKeyPress方法,以防止SelectedCell屬性發生更改。當單元格被選中但未被編輯時,這可以正常工作。但是,如果按下Enter鍵時單元格處於編輯模式,則CellEndEdit事件仍會觸發,並且SelectedCell屬性隨後會更改。如何防止在DataGridView中按Enter鍵結束EditMode?

如何在DataGridView控件上停止編輯模式的Enter鍵?

+0

恐怕你必須解釋編輯模式中發生的事情的唯一方法是掛鉤鍵(儘管沒有讓你完全控制這種情況的事件)。在這裏你有一篇文章(在C#中)鏈接到似乎是這個問題的解決方案:http://stackoverflow.com/questions/2527371/how-can-i-change-what-happens-when-enter- key-is-press-on-a-datagridview – varocarbas

+0

謝謝,使用你的鏈接我找到了我正在尋找的答案! –

+0

我很高興得到了幫助。 – varocarbas

回答

3

我找到了答案,這要歸功於varocarbas,他在下面評論我的原始問題。我的假設是CellEndEdit事件在ProcessCmdKeys()方法調用之後的某個地方被觸發,但由於ENTER鍵的優先級高於普通鍵(它是Command鍵),所以在OnKeyPress()調用之前。這就解釋了爲什麼當一個單元格仍處於使用OnKeyPress()的EditMode中時,我無法改變行爲。

,我創建的自定義的DataGridView,防止任何行動發生之後在一個DataGridView的ENTER鍵按下,可以在下面看到:

Public Class clsModifyDataGridView 
    Inherits Windows.Forms.DataGridView 

    ''' <summary> 
    ''' Changes the behavior in response to a Command-precedence key press 
    ''' </summary> 
    ''' <returns>True if we handled the key-press, otherwise dependent on default behavior</returns> 
    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean 
     ' Was the ENTER key pressed? 
     If keyData = Keys.Enter Then  ' YES 
      ' DO NOTHING 
      Return True 
     End If 

     ' Handle all other keys as usual 
     Return MyBase.ProcessCmdKey(msg, keyData) 
    End Function 
End Class 

有人如果請大家指正我的假設成立呼叫序列不足。還要注意,這個ProcessCmdKey()覆蓋使得我之前提到的OnKeyPress()方法的覆蓋是不必要的。

+0

ProcessCmdKey在其他任何操作之前被調用(http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.processcmdkey.aspx) – varocarbas

相關問題