当我在单元格内编辑文本时,DataGridView keydown 事件不起作用。
我正在分配快捷方式Alt+S要保存数据,当单元格不处于编辑模式时它可以工作,但如果它处于编辑模式,下面的代码将不起作用
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == (Keys.Alt | Keys.S))
{
//save data
}
}
每当单元格处于编辑模式时,其托管控件都会接收KeyDown
事件而不是父事件DataGridView
包含它的。这就是为什么只要单元格不处于编辑模式(即使它被选中),您的键盘快捷键就会起作用,因为您的DataGridView
控制本身接收KeyDown
事件。但是,当您处于编辑模式时,单元格包含的编辑控件正在接收事件,但不会发生任何事情,因为它没有附加自定义处理程序例程。
我花了太多时间调整标准DataGridView
控制以我想要的方式处理编辑提交,我发现解决这种现象的最简单方法是对现有的DataGridView
控制并覆盖其ProcessCmdKey功能。无论您在此处输入什么自定义代码,每当按下顶部的键时都会运行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);
}
}
另请参阅相关但有些旧的文章:如何使用 Visual C# 捕获控件中的击键
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)