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

时间:2015-04-01 08:54:49

标签: c# indexing datagridview tabs

按编程按钮以编程方式跳转到下一行。 如果我想跳回去,我使用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;
        }
    }

1 个答案:

答案 0 :(得分:2)

您遇到的问题是因为按下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;
        }
    }
}