禁用TabControl上的默认快捷方式

时间:2009-12-23 13:33:30

标签: .net winforms tabcontrol

Alt text

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

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

3 个答案:

答案 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 初看起来对我的应用程序造成了严重破坏。我用它来保存我的资产。