按钮单击不激活当焦点设置为CellEndEdit上的DataGridView中的下一个单元格时

时间:2017-02-01 08:00:05

标签: c# winforms datagridview

在Windows窗体上,我有一个包含3列和几个按钮的gridview来处理数据。 Grid是可编辑的,每当用户按下" Enter"时,我使用下面的代码将焦点移动到当前行的下一个单元格。键入编辑模式。

private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex != dataGridView.Columns.Count - 1)
        {
            this.BeginInvoke(new MethodInvoker(() =>
            {
                dataGridView.CurrentCell = dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex + 1];
            }));
        }
    }

代码工作正常,并根据需要将焦点移动到下一个单元格。但是,当网格的单元格处于焦点时单击任何按钮时会出现问题。由于焦点位于特定单元格上,因此单击该按钮会在按钮的单击事件之前触发 CellEndEdit 事件,并且由于我的代码,焦点将移至下一个单元格和按钮单击根本不会被触发。我想确保在单击按钮时不会触发写入移动到CellEndEdit函数中的下一个单元格的代码。

  1. 在GridView中编辑单元格,按Enter,焦点移动到下一个单元格 - 正确
  2. 在GridView中编辑一个调用,点击任意按钮,焦点移动到下一个单元格,按钮点击事件未触发 - 问题
  3. 我在SO和互联网上搜索了很多关于这个问题的内容,但无法找到永久的解决方案。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以使用KeyDown事件。

可能是这样的:

private void dataGridView_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyData == Keys.Enter)
    {
        // the rest of your code

        e.Handled = true;
    }
}

答案 1 :(得分:1)

覆盖ProcessCmdKey的{​​{1}},检查form是否处于编辑模式并点击了CurrentCell

Enter