需求:游標停留在 TextBox 時,按 ↑/↓ 鍵讓 DataGridView 選中上/下一列,TextBox 保持焦點。
private void textBox1_KeyDown(object sender, KeyEventArgs e) {
if (dataGridView1.Rows.Count == 0) return;
int currentIndex = dataGridView1.CurrentCell?.RowIndex ?? -1;
if (currentIndex < 0) return;
int targetIndex = currentIndex;
if (e.KeyCode == Keys.Down) targetIndex = Math.Min(currentIndex + 1, dataGridView1.Rows.Count - 1);
else if (e.KeyCode == Keys.Up) targetIndex = Math.Max(currentIndex - 1, 0);
else return;
dataGridView1.ClearSelection();
dataGridView1.Rows[targetIndex].Selected = true;
dataGridView1.CurrentCell = dataGridView1.Rows[targetIndex].Cells[0];
e.Handled = true; // 防止 TextBox 內部游標移動
}
KeyDown 而非 KeyPress 以捕獲方向鍵。e.Handled = true 避免 TextBox 吃掉按鍵導致游標跳動。CurrentCell 為 null 防呆。dataGridView1.FirstDisplayedScrollingRowIndex = targetIndex;。