Visual studio 2015 Visual Studio 2015 Tabcontrol禁用键盘快捷键Ctrl+;选项卡&;Ctrl+;班次+;标签

Visual studio 2015 Visual Studio 2015 Tabcontrol禁用键盘快捷键Ctrl+;选项卡&;Ctrl+;班次+;标签,visual-studio-2015,Visual Studio 2015,我制作了一个按钮,可以从一个选项卡导航到另一个选项卡,我想创建一个导航程序,看起来好像我在从一个房间导航到另一个房间,如何在Visual Studio 2015的tab Control中禁用我的应用程序用户使用Ctrl+tab和Ctrl+Shift+tab?TabControl的键盘操作相当不寻常,即使子控件具有焦点,它也会引发KeyDown事件。但是设置e.Handled=true不会抑制击键。有点小毛病。解决此限制的两种基本方法都涉及重写受保护的ProcessCmdKey()方法。第一种方法


我制作了一个按钮,可以从一个选项卡导航到另一个选项卡,我想创建一个导航程序,看起来好像我在从一个房间导航到另一个房间,如何在Visual Studio 2015的tab Control中禁用我的应用程序用户使用Ctrl+tab和Ctrl+Shift+tab?

TabControl的键盘操作相当不寻常,即使子控件具有焦点,它也会引发KeyDown事件。但是设置e.Handled=true不会抑制击键。有点小毛病。解决此限制的两种基本方法都涉及重写受保护的ProcessCmdKey()方法。第一种方法是从TabControl派生您自己的类,如果您出于其他原因想要修补控件,这通常是可取的。像这样:

using System;
using System.Windows.Forms;

public class MyTabControl : TabControl {
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        if (keyData == (Keys.Tab | Keys.Control) ||
            keyData == (Keys.Tab | Keys.Control | Keys.Shift)) {
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}
构建程序并从工具箱顶部删除新控件,替换现有控件

另一种方法是在击键到达tab控件之前拦截击键。更麻烦的是,由于您必须注意哪个控件具有焦点,以及它是否是选项卡控件的子控件,请将此代码复制/粘贴到表单类中:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
    var ctl = this.ActiveControl;
    while (ctl != null) {
        if (ctl == myTabControl1) {
            if (keyData == (Keys.Tab | Keys.Control) ||
                keyData == (Keys.Tab | Keys.Control | Keys.Shift)) {
                return true;
            }
        }
        ctl = ctl.Parent;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}
将“tabControl1”替换为控件的名称