У меня есть пользовательский элемент управления, который содержит FlowLayoutPanel
(поток сверху вниз) с кучей радиокнопок. Элемент управления выставляет событие CheckedChanged
, которое срабатывает всякий раз, когда изменяется одна из проверок радиокнопок.
Моя форма содержит пользовательский контроль и текстовое поле. Я подписываюсь на событие usercontrol CheckedChanged
и, в зависимости от того, какая кнопка переключается, я отключаю текстовое поле или помещаю фокус в текстовое поле.
Все это прекрасно работает при щелчке мышью при изменении состояния проверки радиокнопки. Тем не менее, это будет зависать бесконечно при использовании клавиш со стрелками. Я не понимаю, почему разница.
Ниже приведены шаги для воспроизведения поведения, которое я вижу:
Создайте пользовательский элемент управления, перетащите элемент управления FlowLayoutPanel
и установите его FlowDirection = TopDown
. Затем добавьте две радиокнопки к FlowLayoutPanel
.
Предоставить обработчик событий в usercontrol
public event EventHandler CheckedChanged
{
add { radioButton2.CheckedChanged += value; }
remove { radioButton2.CheckedChanged -= value; }
}
Создайте форму окна и удалите вышеуказанный пользовательский элемент управления. Добавьте текстовое поле и установите Enabled
в False. Подпишитесь на событие usercontrol CheckedChanged
следующим образом
private void userControl11_CheckedChanged(object sender, EventArgs e)
{
textBox1.Select();
}
Run. Обратите внимание, что если вы используете мышь для переключения между радиокнопками, все работает хорошо; но он вылетит, если вы используете клавиши со стрелками вверх / вниз.