每當單元處於編輯模式,其託管的控件正在接收KeyDown
事件,而不是包含它的父代DataGridView
。這就是您的鍵盤快捷鍵在單元格未處於編輯模式時(即使它被選中)正在工作的原因,因爲您的DataGridView
控件本身會收到KeyDown
事件。但是,當處於編輯模式時,單元格包含的編輯控件正在接收事件,並且沒有發生任何事情,因爲它沒有附加自定義處理程序例程。
我已經花了太多的時間調整的標準DataGridView
控制處理編輯提交我想它的方式,我發現要解決這種現象的最簡單的方法是通過繼承已有的DataGridView
控制和覆蓋其ProcessCmdKey
function。無論您在此處輸入的自定義代碼是否在DataGridView
頂部按下某個鍵時都會運行,而不管它是否處於編輯模式。
例如,你可以做這樣的事情:
class MyDataGridView : System.Windows.Forms.DataGridView
{
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
MessageBox.Show("Key Press Detected");
if ((keyData == (Keys.Alt | Keys.S)))
{
//Save data
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
另請參閱相關的,雖然有點老,文章:How to trap keystrokes in controls by using Visual C#
它沒有被觸發,或者代碼執行不正確?你能解釋一下你在做什麼嗎? – Rox 2010-11-26 10:23:35
部分在這個鏈接的答案是有點相關 - http://stackoverflow.com/questions/686309/datagridview-change-edit-control-size-while-editing/23703744 – barlop 2016-05-29 03:50:29