0
我有一個帶有1行和10列的Textbox和DataGridView的表單。當用戶在列#9上點擊TAB時,我希望焦點轉到窗體的Tab鍵順序(文本框)上的下一個控件。要做到這一點,我重寫ProcessCmd與此代碼:手動剔出DataGridView
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,網格會變得焦點。
我把它作爲一個網格,可以在任何可能有許多其他控件的窗體上工作。這種形式是一個原型,所以它只有一個其他的控制。
我錯過了什麼嗎?
你爲什麼不嘗試在開關的情況下進行檢查,如果是在編輯模式下,儘量節省/執行'frmParent.SelectNextControl之前首先取消更改(frmParent.ActiveControl ,true,true,true,true);' – Ruly 2013-04-04 00:56:13
該代碼被簡化爲專注於我遇到的問題。實際的代碼在調用SelectNextControl之前驗證並保存更改。 – 2013-04-04 18:08:49