我已经制作了一个按钮,可以从一个选项卡导航到另一个选项卡,我想要创建一个导航程序,看起来好像我正在从一个房间导航到另一个房间,如何禁用 Ctrl + Tab & Ctrl + Shift + Tab 来自Visual Studio 2015中Tab控件中的App用户?
答案 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"用您的控件名称。