C#:在 datagridview 中取回行(shift+tab)

C#: get row back in datagridview (shift+tab)

我按 Tab 按钮以编程方式跳转到下一行。 如果我想跳回,我使用 tab + shift 键。 如果按下 tab + shift,行数将减少 2。 当我想从最后一行返回时,索引跳转到第一个控件,它的制表符索引为 0。 最后一行有什么问题?

private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Tab)
        {
            int row = dataGridView1.CurrentCell.RowIndex;
            row++;
            if (row > dataGridView1.RowCount - 1)
            {
                menuStrip1.Select();
                datensatzToolStripMenuItem.Select();
                dataGridView1.CurrentCell = dataGridView1[0, 0];
            }
            else dataGridView1.CurrentCell = dataGridView1[0, row];
            e.Handled = true;
        }
        if (e.Modifiers == Keys.Shift && e.KeyCode == Keys.Tab)
        {
            int row = dataGridView1.CurrentCell.RowIndex;
            row -= 2;
            if (row < 0) 
            {
                menuStrip1.Select();
                datensatzToolStripMenuItem.Select();
                dataGridView1.CurrentCell = dataGridView1[0, 0];
            }
            else dataGridView1.CurrentCell = dataGridView1[0, row];
            e.Handled = true;
        }
    }

您遇到的问题是因为当按下 SHIFT+Tab 时,您的代码中的两个条件都将得到满足。

以下代码在我的机器上运行良好。

private void dataGridView1_KeyDown(object sender, KeyEventArgs e) {
    if (e.KeyCode == Keys.Tab) {
        if (e.Modifiers != Keys.Shift) {
            int row = dataGridView1.CurrentCell.RowIndex;
            row++;
            if (row > dataGridView1.RowCount - 1) {
                menuStrip1.Select();
                datensatzToolStripMenuItem.Select();
                dataGridView1.CurrentCell = dataGridView1[0, 0];
            }
            else {
                dataGridView1.CurrentCell = dataGridView1[0, row];
            }
            e.Handled = true;
        }
        else {
            int row = dataGridView1.CurrentCell.RowIndex;
            row -= 1;
            if (row < 0) {
                menuStrip1.Select();
                datensatzToolStripMenuItem.Select();
                dataGridView1.CurrentCell = dataGridView1[0, 0];
            }
            else {
                dataGridView1.CurrentCell = dataGridView1[0, row];
            }
            e.Handled = true;
        }
    }
}