我在WinForms应用程序中使用DataGridView。我的主要目的是使Enter键不会移到网格的下一行。我仍然希望Enter键验证并结束编辑模式。
我发现this FAQ entry并将其子类化为DataGridView来覆盖ProcessDialogKey()。如果按下的键是Enter,则调用EndEdit(),否则调用base.ProcessDialogKey()。
它工作得很好,除了不触发CellValidating事件。
当前,我只是在调用EndEdit之前手动调用验证逻辑,但是似乎缺少了一些东西。
我想我可以调用OnCellValidating,但是我担心我会错过其他事件。我真正想要的是某种EndEdit()的行为,就像在网格的最后一行上按Enter键并禁用添加一样。
最佳答案
在更改CurrentCell之前,不会调用CellValidating。因此,我对此的犹豫不决是更改CurrentCell,然后切换回当前的Cell。
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Enter)
{
DataGridViewCell currentCell = CurrentCell;
EndEdit();
CurrentCell = null;
CurrentCell = currentCell;
return true;
}
return base.ProcessDialogKey(keyData);
}