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