Как получить зарегистрированный переключатель в групповом ящике?
У меня много переключателей в групповом поле. Обычно я проверяю каждый переключатель каждый раз, используя If radiobutton1.Checked = True Then
.
Но я думаю, может быть, есть умный способ проверить, какой переключатель установлен в групповом ящике. Любая идея?
Ответы
Ответ 1
попробуйте это
Dim rButton As RadioButton =
GroupBox1.Controls
.OfType(Of RadioButton)
.FirstOrDefault(Function(r) r.Checked = True)
это вернет проверочный RadioButton
в GroupBox
Обратите внимание, что это запрос LINQ, и вы должны иметь
Imports System.Linq
Если вы этого не сделаете, ваш IDE/Compiler может указать, что OfType
не является членом System.Windows.Forms.Control.ControlCollection
Ответ 2
Если вы добавите их (например, загрузите событие) в список, вы можете использовать LINQ:
Dim checkedRadioButton as RadioButton
checkedRadioButton =
radioButtonList.FirstOrDefault(Function(radioButton) radioButton.Checked))
Это должно быть ОК, потому что один из них проверен максимум.
ИЗМЕНИТЬ
Еще лучше: просто запросите коллекцию Controls GroupBox:
Dim checkedRadioButton as RadioButton
checkedRadioButton =
groupBox.Controls.OfType(Of RadioButton)().FirstOrDefault(Function(radioButton) radioButton.Checked))
Имейте в виду, что это вызовет проблемы, если в Groupbox нет RadioButtons!
Ответ 3
'returns which radio button is selected within GroupBox passed
Private Function WhatRadioIsSelected(ByVal grp As GroupBox) As String
Dim rbtn As RadioButton
Dim rbtnName As String = String.Empty
Try
Dim ctl As Control
For Each ctl In grp.Controls
If TypeOf ctl Is RadioButton Then
rbtn = DirectCast(ctl, RadioButton)
If rbtn.Checked Then
rbtnName = rbtn.Name
Exit For
End If
End If
Next
Catch ex As Exception
Dim stackframe As New Diagnostics.StackFrame(1)
Throw New Exception("An error occurred in routine, '" & stackframe.GetMethod.ReflectedType.Name & "." & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'." & Environment.NewLine & " Message was: '" & ex.Message & "'")
End Try
Return rbtnName
End Function
Ответ 4
Я знаю, что он отмечен vb.net, но вот пример С#
var checkedButton = GroupBox1.Controls.OfType<RadioButton>()
.FirstOrDefault(rb => rb.Checked);
Ответ 5
Вот тестовая программа с групповым ящиком с четырьмя переключателями.
Public Class Form1
Private Sub Form1_Shown(sender As Object, _
e As System.EventArgs) Handles Me.Shown
RadioButton1.Tag = New Action(AddressOf rb1Action)
RadioButton2.Tag = New Action(AddressOf rb2Action)
RadioButton3.Tag = New Action(AddressOf rb3Action)
RadioButton4.Tag = New Action(AddressOf rb4Action)
End Sub
Private Sub rb1Action()
Debug.WriteLine("1 " & RadioButton1.Checked)
End Sub
Private Sub rb2Action()
Debug.WriteLine("2 " & RadioButton2.Checked)
End Sub
Private Sub rb3Action()
Debug.WriteLine("3 " & RadioButton3.Checked)
End Sub
Private Sub rb4Action()
Debug.WriteLine("4 " & RadioButton4.Checked)
End Sub
Private Sub RadioButton_CheckedChanged(sender As System.Object, _
e As System.EventArgs) Handles _
RadioButton1.CheckedChanged, _
RadioButton2.CheckedChanged, _
RadioButton3.CheckedChanged, _
RadioButton4.CheckedChanged
Dim aRadioButton As RadioButton = DirectCast(sender, RadioButton)
If aRadioButton.Checked Then
Dim rbAct As Action = DirectCast(aRadioButton.Tag, Action)
rbAct.Invoke()
End If
End Sub
End Class
Ответ 6
Вы можете запустить цикл foreach для итерации с помощью сканирования элементов управления
RadioButton внутри GroupBox, поэтому с помощью элемента управления см. Пример ниже.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'RadioButton checked
Dim ceckedRadioButton As Integer = 0
'Total RadioButton on GroupBox
Dim totalRadioButton As Integer = 0
'Iteration and check RadioButton selected
For Each myControl As RadioButton In Me.GroupBox1.Controls.OfType(Of RadioButton)()
'If RadioButton is checked
If myControl.Checked Then
'increases variable ceckedRadioButton
ceckedRadioButton += 1
End If
'increases variable totalRadioButton
totalRadioButton += 1
Next
If ceckedRadioButton > 0 Then
'RadioButon show how many are selected
MessageBox.Show("Were selected" & " " & ceckedRadioButton.ToString & " " & "RadioButton on" & " " & totalRadioButton.ToString)
Else
'No selected RadioButton
MessageBox.Show("No selected RadioButton")
End If
End Sub
Bye
Ответ 7
У меня есть простой и простой
For Each b As RadioButton In GroupBox1.Controls.OfType(Of RadioButton)()
If b.Checked = True Then
MsgBox("I hope that will help you")
End If
Next
Ответ 8
Есть 3 RadioButtons: RadioButton1, RadioButton2 y RadioButton3
'A handler for the click event of the 3 buttons is created
Private Sub Radios_Click(sender As Object, e As EventArgs) Handles RadioButton1.Click, RadioButton2.Click, RadioButton3.Click
Dim rb As RadioButton
rb = sender
MsgBox(rb.Name) 'Displays the name of the selected control or that he was made the click
End Sub
Ответ 9
Я создал три переключателя из имен элементов из таблицы. Я также создаю для этого обработчик событий. Теперь, когда я пытаюсь получить, какая кнопка проверяется его текстовым значением в msgbox.It показывает правильное имя, но всплывающее окно msgbox дважды для одного выбора. Я использую VB.net 2012.
Private Sub iButton_checked(ByVal sender As System.Object, ByVal e As System.EventArgs)
For Each b As RadioButton In grpgodown.Controls.OfType(Of RadioButton)()
If b.Checked = True Then
MsgBox(b.Text)
End If
Next
End Sub
Ответ 10
Private Sub BTN_OK_Click(sender As Object, e As EventArgs) Handles BTN_OK.Click
For Each Ctrl In GroupBox1.Controls
If Ctrl.checked Then MsgBox(Ctrl.text) 'for show select RadioButton Check
Next
Ответ 11
Select Case True
RadioButton1.checked
'Do this action for Rad1
RadioButton2.checked
'Do this action for Rad2
RadioButton3.checked
'Do this action for rad3
End Select