WinForm - Tabstop не работает
-
01-10-2019 - |
Вопрос
У меня есть WinForm с 3 групповыми коробками, одна с комбо коробками и двумя с помощью радиопередач. Я устанавливаю всех них, и их дети контролируют «TabStop = False», но когда я циклирую с вкладкой, выбранная в данный момент выбранная радиоустановка в каждой из последних двух групповых коробок сосредоточена.
Если нет способа изменить это поведение, то, что было бы хорошим событием, чтобы поймать и переместить фокус? Я не могу найти событие «Onfocus».
Решение состоит в том, чтобы установить один метод (код ниже) для обработки события «Enter» каждой радиопередачи в форме (если это то, что вы хотите).
На самом деле, я только сделал это для радиопередач первой группы, и он работал, радиопередающие кнопки второго группы не получают фокусировки, хотя их «ввод» событий не обрабатываются. Это не поведение, которое вы ожидали.
private void radiobuttonXGroup1_Enter(object sender, EventArgs e)
{
SomeOtherControl.Focus();
}
В файле * .designer.cs вы редактируете каждое событие ввода (для каждой кнопки переключателя), чтобы указать на один обработчик событий (вышеуказанный метод).
this.radiobutton1Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter);
this.radiobutton2Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter);
this.radiobutton3Group1.Enter += new System.EventHandler(this.radiobuttonXGroup1_Enter);
Решение
Документация MSDN для Radiobutton.tabstop. Состояния «Это API поддерживает инфраструктуру .NET Framework и не предназначена для использования непосредственно из вашего кода». Что в основном означает: «Это не будет работать, как вы этого ожидаете».
С этим сказанным, событие Enter будет огонь, когда кнопка получает фокус. Вы можете попытаться использовать это, чтобы переместить фокус на другой элемент управления.
Другие советы
Установка TABSTOP в FALSE на Radiobutton, чтобы предотвратить работу в режиме управления, пока вы не выберете переключательную кнопку без каких-либо дополнительных переопределений, как предложены @ Matercy.
РЕДАКТИРОВАТЬ
Следующий код предотвращает получение кода, чтобы получить ключевое событие вкладывания:
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
radioButton1.TabStop = false;
}
Радио кнопки по-разному ведут себя по-разному относительно вкладки от других элементов управления тем, что они работают в наборах или группах на основе установки индекса вкладки или размещения, затем кнопки радио в групповом поле.