Использование WinForms; Есть ли лучший способ найти отмеченный RadioButton для группы? Мне кажется, что приведенный ниже код не нужен. Когда вы выбираете другой RadioButton, он знает, какой из них нужно снять… поэтому он должен знать, какой из них отмечен. Как получить эту информацию, не выполняя много инструкций if (или переключателя).
RadioButton rb = null;
if (m_RadioButton1.Checked == true)
{
rb = m_RadioButton1;
}
else if (m_RadioButton2.Checked == true)
{
rb = m_RadioButton2;
}
else if (m_RadioButton3.Checked == true)
{
rb = m_RadioButton3;
}
c#
.net
winforms
radio-button
Билли
источник
источник
Ответы:
Вы можете использовать LINQ:
Обратите внимание, что для этого необходимо, чтобы все переключатели находились непосредственно в одном контейнере (например, в панели или форме) и чтобы в контейнере была только одна группа. Если это не так, вы можете создать
List<RadioButton>
s в своем конструкторе для каждой группы, а затем написатьlist.FirstOrDefault(r => r.Checked)
.источник
s.FirstOrDefault
вместоlist.FirstOrDefault
второго абзаца вашего ответа?s
это множественное число, а не имя переменной.Вы можете связать CheckedEvents всех кнопок с одним обработчиком. Там вы можете легко получить правильный флажок.
источник
Для тех, у кого нет LINQ:
источник
OP хотел получить проверенный RadioButton BY GROUP. Хотя ответ @SLaks отличный, он на самом деле не отвечает на главный вопрос OP. Чтобы улучшить ответ @SLaks, просто сделайте LINQ еще дальше.
Вот пример из моего собственного рабочего кода. В обычном WPF мои RadioButtons содержатся в
Grid
(названном "myGrid") с множеством других типов элементов управления. У меня есть две разные группы RadioButton в сетке.Чтобы получить проверенный RadioButton из определенной группы:
Если в вашем коде есть возможность не проверять RadioButtons, используйте
SingleOrDefault()
(Если я не использую кнопки с тремя состояниями, я всегда устанавливаю одну кнопку «IsChecked» как выбор по умолчанию.)источник
.Where(r => r.GroupName == "GroupName" && r.IsChecked == true)
потому чтоr.IsChecked
свойство bool допускает значение NULL.Вы можете использовать событие CheckedChanged для всех ваших RadioButton.
Sender
будут отключены и отмечены RadioButtons.источник
Вы можете использовать метод Extension для итерации коллекции RadioButton Parent.Controls. Это позволяет вам запрашивать другие RadioButton в той же области. Используя два метода расширения, вы можете использовать первый, чтобы определить, выбраны ли какие-либо RadioButton в группе, а затем использовать второй, чтобы получить выбор. Поле RadioButton Tag может использоваться для хранения Enum для идентификации каждого RadioButton в группе:
Вот типичный образец использования:
источник
В дополнение к подключению CheckedChangedEvent можно использовать свойство Controls "Tag", чтобы различать переключатели ... альтернативой (спагетти-код) будет свойство "TabIndex"; P
источник
Иногда в подобных ситуациях я скучаю по своей юности, когда Access был моим любимым ядом, и я мог дать каждому переключателю в группе свое собственное значение.
Мой хакер в C # заключается в использовании тега для установки значения, и когда я делаю выбор из группы, я читаю значение тега выбранного радиокнопки. В этом примере directionGroup - это группа, в которой у меня есть четыре пяти переключателя с «None» и «NE», «SE», «NW» и «SW» в качестве тегов на других четырех переключателях.
Я проактивно использовал кнопку, чтобы зафиксировать значение отмеченной кнопки, потому что назначение одного обработчика событий событию CHeckCHanged для всех кнопок приводит к срабатыванию КАЖДОЙ кнопки, потому что изменение одной кнопки меняет их все. Таким образом, значение отправителя всегда является первым RadioButton в группе. Вместо этого я использую этот метод, когда мне нужно выяснить, какой из них выбран, со значениями, которые я хочу получить в свойстве Tag каждого RadioButton.
К вашему сведению, я протестировал и использовал это в своей работе.
детеныш
источник
если вы хотите сохранить выделение в файл или в любой другой и вызвать его позже, вот что я делаю
затем позвони с
источник
Если вы хотите получить индекс выбранного переключателя внутри элемента управления, вы можете использовать этот метод:
Пример использования:
Код не так хорошо протестирован, но кажется, что порядок индекса слева направо и сверху вниз, как при чтении текста. Если переключатель не найден, метод возвращает -1.
Обновление: оказалось, что моя первая попытка не сработала, если внутри элемента управления нет переключателя. Я добавил блок try and catch, чтобы исправить это, и теперь этот метод работает.
источник
GroupBox имеет для этой цели событие Validated, если вы используете WinForms.
источник
Для разработчиков, использующих VB.NET
источник