在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函数中的下一个单元格的代码。
我在SO和互联网上搜索了很多关于这个问题的内容,但无法找到永久的解决方案。任何帮助将不胜感激。
答案 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