禁用TabControl上的默认快捷方式

tsp*_*sps 7 .net tabcontrol winforms

替代文字http://i49.tinypic.com/2eqcajp.jpg

Ctrl+ PageUp/ PageDownCtrl+ Tab是TabControl的默认快捷方式.它们有助于在相邻选项卡之间移动.当我的焦点位于控件(此处为文本框)时,我希望Ctrl+ PageX行为仅适用于外部选项卡(tab1,tab2)和内部选项卡的Ctrl+ Tab行为(tab3,tab4).为此,我需要禁用默认行为.有办法做到这一点吗?

我查看了ProcessDialogKey和IsInputKey,但它们似乎只适用于单个keydata.不处理修饰符.

Han*_*ant 12

TabControl有不寻常的键盘快捷键处理,它们反映到OnKeyDown()方法中.这样做是为了避免它干扰标签页上控件的键盘处理.

你必须覆盖该方法.在项目中添加一个新类并粘贴下面显示的代码.编译.将新控件从工具箱顶部拖放到您的工具箱上Form.

using System;
using System.Windows.Forms;

class MyTabControl : TabControl {
  protected override void OnKeyDown(KeyEventArgs e) {
    if (e.KeyData == (Keys.Tab | Keys.Control) ||
        e.KeyData == (Keys.PageDown | Keys.Control)) {
      // Don't allow tabbing beyond last page
      if (this.SelectedIndex == this.TabCount - 1) return;
    }
    base.OnKeyDown(e);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,上面的代码不会禁用所有选项卡控件热键:您仍然可以使用**CTRL + TAB + SHIFT**等.将if语句更改为:if(ke.Control &&(ke.KeyCode == Keys) .Tab || ke.KeyCode == Keys.Next || ke.KeyCode == Keys.Prior))return;` (4认同)