TabControl的具有相當不尋常的處理來處理Tab鍵。它重寫ProcessKeyPreview()方法來檢測Ctrl/Shift/Tab,然後在其OnKeyDown()方法中實現選項卡選擇。它可以做到這一點,因此它既可以檢測按鍵,也可以檢測任何子控件的焦點。並避免通過其子控件之一加強自定義Tab鍵處理。您可以通過重寫ProcessCmdKey()來使其工作,但是您會中斷要響應選項卡的子控件。
最好的辦法是重寫它的OnKeyDown()方法。爲您的項目添加一個新類並粘貼下面顯示的代碼。編譯。將新的選項卡控件從工具箱的頂部拖放到表單上。
using System;
using System.Windows.Forms;
class MyTabControl : TabControl {
protected override void OnKeyDown(KeyEventArgs e) {
if (e.KeyCode == Keys.Tab && (e.KeyData & Keys.Control) != Keys.None) {
bool forward = (e.KeyData & Keys.Shift) == Keys.None;
// Do your stuff
//...
}
else base.OnKeyDown(e);
}
}
請注意,您還應該考慮Ctrl + PageUp和Ctrl + PageDown。
你可以提供一些細節如何擴展切換? – 2009-12-09 10:26:47
我添加了Form KeyUp/KeyDown的事件處理程序 – Piglet 2009-12-09 10:36:22
和Form.KeyPreview = ...? – 2009-12-09 10:38:45