我想在enter键上修改与导航相关的datagridview的当前行为。当前的行为是跳转到下一行和同一列,我想跳转到下一列和同一行,所以我实现了以下keyDown事件:
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
int numCols = this.dataGridView1.ColumnCount;
int numRows = this.dataGridView1.RowCount;
DataGridViewCell currCell = this.dataGridView1.CurrentCell;
if (currCell.ColumnIndex == numCols - 1)
{
if (currCell.RowIndex < numRows - 1)
{
this.dataGridView1.CurrentCell = this.dataGridView1[0, currCell.RowIndex + 1];
}
}
else
{
this.dataGridView1.CurrentCell = this.dataGridView1[currCell.ColumnIndex + 1, currCell.RowIndex];
}
e.Handled = true;
}
}
问题是,尽管我通过执行以下方式正确订阅了datagridview keydown事件,但是在按下输入键时没有引发上述事件:
this.dataGridView1.KeyDown += new KeyEventHandler(dataGridView1_KeyDown);
因此,按下回车键的当前行为继续是默认值:下一行和同一列。
有什么想法吗?
答案 0 :(得分:0)
你试过KeyUp吗?我猜想移动到另一行的默认行为会出现在KeyUp上,给它一个测试,按回车并保持它,看它是否向下移动一列或者它是否等待你到键盘。也可以是按键,可以测试其中的每一个,因为您的事件可能在默认事件行为之前触发。
此外,您某些是否正在执行事件订阅的代码?如果它在标准的位置,我会假设,但我只是扔掉那里有可能你将该行放在一个不执行以防万一的方法。
答案 1 :(得分:0)
private void dataGridView2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true;
e.Handled = true;
SendKeys.Send("{tab}");
}
}