我有一个带有文本框和 1 行 10 列的 DataGridView 的表单。当用户在第 9 列上按 TAB 时,我希望焦点转到表单选项卡顺序(文本框)上的下一个控件。为此,我使用以下代码覆盖 ProcessCmd:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
const int WM_KEYDOWN = 0x100;
const int WM_SYSKEYDOWN = 0x104;
if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
{
switch (keyData & Keys.KeyCode)
{
case Keys.Tab:
case Keys.Enter:
if (this.CurrentCell != null && this.CurrentCell.ColumnIndex == 8)
{
Form frmParent = FindForm();
frmParent.SelectNextControl(frmParent.ActiveControl, true, true, true, true);
return true;
}
break;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
当我运行它时,如果单元格未处于编辑模式,它可以正常工作。但是,如果单元格处于编辑模式,焦点会离开网格,但似乎无处可去。它不在文本框或网格上。但是,如果我随后打开一个新表单,然后切换回该表单,则文本框具有焦点。或者,如果我然后按 Shift+Tab,网格就会获得焦点。
我把它做成一个网格,可以在任何可以有许多其他控件的表单上工作。此表单是一个原型,因此它只有一个其他控件。
我错过了什么吗?