Я отвечу на эту часть вашего вопроса:
Как избавиться от необходимости повторного нажатия на переключатели?
Вы можете добавить следующий обработчик события к событию Click каждой из трех кнопок RadioButton (свойства Checked которых связаны с настройками приложения) в вашем GroupBox:
Private Sub RadioButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tomRadioButton.Click, dickRadioButton.Click, harryRadioButton.Click
If sender.Checked = False Then
sender.Checked = True
End If
End Sub
Это работает, даже несмотря на то, что непроверенная RadioButton проверяется после нажатия на полсекунды после нажатия на нее.
Причина этой проблемы была объяснена два года назад (в 2008 году) в разделе 5 публикации Выживающие данные WinForms в блоге Turbulent Intelect (спасибо, ohadsc , за ссылка):
Правило 5: Не привязывайте к нажимаемым кнопкам радио
Я знаю, как было бы здорово, если бы ты
может просто связать вашу кучу радио
кнопки для свойства enum. я действительно
делать. Вы думаете, что вы просто собираетесь
подключить некоторые события форматирования и разбора
перевести обратно на ваше перечисление, и
все будет хорошо. Было бы так чертовски
удобно, если это действительно сработало. Но
WinForms просто не предназначены для этого.
Для 3 полных выпусков сейчас (или это 3.5
релизы?), это было так.
Это из-за порядка событий, который
это не то, что MS может пойти
переключаясь не вызывая тысячи
разработчиков, чтобы получить действительно сыр
выкл.
Проблема действительно сводится к
тот факт, что в отличие от других элементов управления
свойства, Проверено свойство
радио-кнопка на самом деле не меняется
пока фокус не покинет переключатель.
И как со всеми WinForms контролирует
фокус не покидает радио
Кнопка до тех пор, пока фокус не будет дан
другой контроль, и на самом деле не до
после события Click нового
сфокусированный контроль сработал. Результат
этого, как это относится к радио
кнопки, это то, что если вы пытаетесь привязать к
их, связанные свойства в вашем
источник данных будет фактически отставать ваш
визуальное состояние переключателей по одному
нажмите . Если у вас есть только два радио
кнопки, источник данных будет
прямо напротив видимого состояния,
пока вы не нажмете в другом месте, что
не вызывает действие, которое
ссылается на эти источники данных
свойства. Который может сделать это
действительно бешеная ошибка, чтобы выследить.
Я почти думал, что у меня галлюцинации.
Теперь, честно говоря, возможно
сделай так, чтоб это работало. Но это клуджист
Клудж, который когда-либо клудж. Хорошо может быть
это не так плохо ... но это грязно
взломать наверняка. Это занимает много работы
за то, что действительно должно
уже будет доступен. Как можно ближе
скажите, единственный способ решить это
проблема, не отказываясь от
механизм привязки данных к
по сути, сделать свой собственный RadioButton
контроль, с изменением свойства и
порядок событий, который на самом деле полезен.
Вы можете написать один с нуля,
или подкласс RadioButton и переопределить
вся логика событий с кастомами
обработка сообщений.