Ctrl + PageUp / PageDown 和 Ctrl + Tab 是默认快捷方式对于TabControl。它们有助于在相邻选项卡之间移动。我希望 Ctrl + PageX 行为仅适用于外部选项卡(tab1,tab2)和 Ctrl + Tab 当焦点位于控件(此处为文本框)时,内部选项卡(tab3,tab4)的行为。为此,我需要禁用默认行为。有没有办法做到这一点?
我查看了ProcessDialogKey和IsInputKey,但它们似乎只适用于单个keydata。不处理修饰符。
答案 0 :(得分:11)
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);
}
}
答案 1 :(得分:4)
正如所写,除非你在选项卡控件的最后一页,否则Hans Passant的答案不起作用。我想要一些不允许任何选项卡上的快捷方式的东西。下面的代码还包含AZ的附加逻辑,用于处理 Ctrl + PageUp 和 Ctrl + PageDown 。希望这个版本使整体逻辑更加清晰:
using System.Windows.Forms;
namespace MyNameSpace
{
internal class NoTabTabControl : TabControl
{
/// <summary>
/// Intercept any key combinations that would change the active tab.
/// </summary>
protected override void OnKeyDown(KeyEventArgs e)
{
bool changeTabKeyCombination =
(e.Control
&& (e.KeyCode == Keys.Tab
|| e.KeyCode == Keys.Next
|| e.KeyCode == Keys.Prior));
if (!changeTabKeyCombination)
{
base.OnKeyDown(e);
}
}
}
}
答案 2 :(得分:0)
只需在您的代码中将tabpageX.Enabled
属性更改为false
。然后使用 Ctrl + Tab 将无法选择tabpageX
。
Ctrl + Tab 初看起来对我的应用程序造成了严重破坏。我用它来保存我的资产。