1

我想修改与输入键导航相关的 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 事件,但在按下 enter 键时并未引发上述事件:

this.dataGridView1.KeyDown += new KeyEventHandler(dataGridView1_KeyDown);

因此,按下回车键时的当前行为仍然是默认行为:下一行和同一列。

有任何想法吗?

4

2 回答 2

0

你试过KeyUp吗?我猜想移动到另一行的默认行为会发生在 KeyUp 上,给它一个测试,按下回车键并按住它,看看它是否向下移动一列,或者它是否等待你键入。也可能是按键,可能会测试其中的每一个以查看,因为您的事件可能在默认事件行为之前触发。

另外,您确定正在执行具有事件订阅的代码吗?如果它在标准位置,我会假设是这样,但我只是在抛出您将该行放置在一个不会执行以防万一的方法中的可能性。

于 2012-08-26T21:50:00.840 回答
0
 private void dataGridView2_KeyDown(object sender, KeyEventArgs e)
 {
    if (e.KeyCode == Keys.Enter)
    {
        e.SuppressKeyPress = true;
        e.Handled = true;
        SendKeys.Send("{tab}");
    }
 }
于 2013-03-09T18:06:25.410 回答