输入单元格后,我试图转到datagridview中的下一个单元格,但它转到同一列中的下一行**如果未在单元格中输入任何内容,它工作正常,如何解决此问题
private void dgvacc_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
int row = dgvacc.CurrentCell.RowIndex;
int col = dgvacc.CurrentCell.ColumnIndex;
try
{
if (col < dgvacc.Columns.Count - 1)
{
dgvacc.CurrentCell = dgvacc.Rows[row -1].Cells[col + 1];
dgvacc.Focus();
}
else if (col == dgvacc.Columns.Count - 1)
{
dgvacc.CurrentCell = dgvacc.Rows[row].Cells[0];
dgvacc.Focus();
}
}
catch (Exception)
{
}
}
}
3条答案
按热度按时间e1xvtsh31#
备选案文1
覆盖窗体的
ProcessCmdKey
以捕获Keys.Enter
按下并选择下一个单元格IF网格具有焦点ORDataGridView.EditingControl
属性不是null/Nothing
。备选案文2
从
DataGridView
派生一个新类,并执行相同的操作,但 focus 和 EditingControl 检查除外:8tntrjer2#
感谢所有我找到的答案,它解决了它-再次感谢
ippsafx73#
又一个迟来的回复。
有两种模式可以拦截ENTER键:
1.如果单元格处于编辑模式,则单元格本身必须处理键
1.否则,DGV必须处理该密钥
两者都是为了防止按ENTER键时细胞进展。
以下是“DataGridViewCustomColumn”的子类化解决方案,该解决方案的作用类似于“DataGridViewTextBoxColumn”,但在这两种情况下都禁止ENTER键前进。