Отключить ярлыки по умолчанию на TabControl - PullRequest
7 голосов
/ 23 декабря 2009

Alt text

Ctrl + PageUp / PageDown и Ctrl + Tab являются ярлыками по умолчанию для TabControl. Они помогают перемещаться между соседними вкладками. Мне бы хотелось, чтобы поведение Ctrl + PageX работало только для внешних вкладок (tab1, tab2) и поведение Ctrl + Tab для внутренние вкладки (tab3, tab4), когда мой фокус находится в элементе управления (текстовое поле здесь). Для этого мне нужно отключить поведение по умолчанию. Есть ли способ сделать это?

Я посмотрел на ProcessDialogKey и IsInputKey, но, похоже, они работают только с отдельными ключевыми данными. Модификаторы не обрабатываются.

Ответы [ 3 ]

12 голосов
/ 23 декабря 2009

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);
  }
}
4 голосов
/ 21 июня 2013

Как написано, ответ Ханса Пассанта не сработал, если вы не были на последней странице вкладки. Я хочу что-то, что не позволяет ярлыки на любой из вкладок. Приведенный ниже код также включает дополнительную логику 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);
            }
        }
    }
}
0 голосов
/ 14 марта 2013

Просто измените tabpageX.Enabled свойство на false в вашем коде, когда это необходимо. Тогда с помощью Ctrl + Tab не сможет выбрать tabpageX.

Ctrl + Tab с первого взгляда создал хаос в моем приложении. Я использовал это, чтобы сохранить мои активы.

...