我在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);
    }

10-06 13:15