полностью отключить TabOrder на форме - PullRequest
0 голосов
/ 07 июня 2011

WinForms: мне не нужен порядок вкладок. Я хочу, чтобы я мог программно обрабатывать все последовательности вкладок в форме с некоторой логикой, которая мне нужна. Как я могу полностью отключить порядок вкладок? Я предполагаю, что после этого я должен иметь дело с событием KeyDown каждого элемента управления или каким-либо подобным событием ....

Ответы [ 4 ]

3 голосов
/ 07 июня 2011

Вам необходимо переопределить метод ProcessCmdKey () формы.Проверьте keydata == Keys.Tab и (Keys.Shift | Keys.Tab), чтобы обнаружить соответственно вкладки вперед и назад.Верните true, чтобы указать, что вы использовали ключ, и он больше не должен использоваться.Что побеждает Winforms по умолчанию для обработки клавиши Tab.Никаких дополнительных изменений в элементах управления не требуется.

Свойство ActiveControl формы сообщает вам, какой элемент управления в данный момент находится в фокусе, вам необходимо использовать его, чтобы выяснить, какой элемент управления должен быть сфокусирован следующим.Помните, что это может быть технически нулевым.Не упустите элементы управления, которые встроены в элемент управления контейнера, такой как Panel или UserControl.Делать эту работу, безусловно, неприятно, и очень трудно поддерживать.Делайте это только в том случае, если в форме имеется ограниченное количество элементов управления.

2 голосов
/ 07 июня 2011

Как сказал Адриан, установив для табуляции стоп-значение false, вы можете отключить такую ​​функцию, как эта, может быть полезна для отключения всех табов

private void DiableTabStop(Control ctrl)
{
    ctrl.TabStop = false;
    foreach (Control item in ctrl.Controls)
    {
        DiableTabStop(item);
    }
}

и вызова ее при загрузке формы

DiableTabStop(this);
1 голос
/ 07 июня 2011

Один из подходов состоит в том, чтобы установить для свойства TabStop каждого элемента управления в форме значение false.Это предотвратит фокусировку клавиши табуляции.

Если вы не хотите делать это вручную для каждого элемента управления (например, в представлении дизайна), вы можете создать метод, который будет выполнять итерацию по всем элементам управления в коллекции Controls формы и устанавливатьсвойство на каждом, а затем вызвать его из конструктора вашей формы.

0 голосов
/ 07 июня 2011

В дополнение к отключению табуляции для рамки страницы, как вы упомянули, вы хотите контролировать, какая "вкладка" активна.Вы можете иметь настраиваемое свойство в вашей форме «WhichTab» должно быть показано.Затем переопределите событие click и проверьте, является ли страница входящего отправителя / eventarg страницей другой страницы ... несмотря ни на что, принудительно вернитесь к «WhichTab», ВЫ контролируете настройку ... Когда будете готовы активировать указанную страницу, попросите объект управления вкладкой АКТИВИРОВАТЬ новую страницу, чтобы отобразить ее пользователю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...