Visual Studio 2015 Tabcontrol禁用键盘快捷键Ctrl + Tab&按Ctrl + Shift + Tab键

时间:2017-12-25 11:10:33

标签: visual-studio-2015

Pictureofmyissue

我已经制作了一个按钮,可以从一个选项卡导航到另一个选项卡,我想要创建一个导航程序,看起来好像我正在从一个房间导航到另一个房间,如何禁用 Ctrl + Tab & Ctrl + Shift + Tab 来自Visual Studio 2015中Tab控件中的App用户?

1 个答案:

答案 0 :(得分:1)

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);
    }
}

构建程序并从工具箱顶部删除新控件,替换现有控件。

另一种方法是在键击到达制表符控件之前拦截击键。更重要的是因为你必须注意哪个控件有焦点,以及它是否是制表符控件的子节点,所以将此代码复制/粘贴到表单类中:

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"用您的控件名称。