每当单元处于编辑模式,其托管的控件正在接收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