在Windows窗体上,我有一个包含3列和几个按钮来处理数据处理的gridview。网格是可编辑的,每当用户在编辑模式下按下“ 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];
}));
}
}
该代码工作正常,并根据需要将焦点移到下一个单元格。但是,当我在网格单元格处于焦点状态时单击任何按钮时,就会出现问题。由于焦点位于某个单元格上,因此单击按钮会在按钮的Click事件之前触发CellEndEdit事件,并且由于我的代码,焦点移到了下一个单元格,而按钮单击根本没有触发。我想确保在单击按钮时不会触发编写为移至CellEndEdit函数中的下一个单元格的代码。
关于此问题,我在SO和Internet上进行了大量搜索,但找不到永久性的解决方案。任何帮助将不胜感激。
覆盖ProcessCmdKey
的form
,检查是否CurrentCell
处于编辑模式和Enter
被点击:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Enter && this.dataGridView.IsCurrentCellInEditMode)
{
if (this.dataGridView.CurrentCell.ColumnIndex != this.dataGridView.Columns.Count - 1)
{
//this.BeginInvoke(new MethodInvoker(() =>
//{
this.dataGridView.CurrentCell = this.dataGridView.CurrentRow.Cells[this.dataGridView.CurrentCell.ColumnIndex + 1];
//}));
}
return true;
}
else return base.ProcessCmdKey(ref msg, keyData);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句