Как получить галочку в групповой коробке? - PullRequest
16 голосов
/ 24 июня 2011

У меня много переключателей в групповой коробке.Обычно я проверяю каждую радиокнопку в отдельности, используя If radiobutton1.Checked = True Then.

Но я думаю, что, возможно, есть разумный способ проверить, какая радиокнопка проверяется в групповом окне.Есть идеи?

Ответы [ 11 ]

45 голосов
/ 24 июня 2011

попробуйте это

Dim rButton As RadioButton = 
        GroupBox1.Controls
       .OfType(Of RadioButton)
       .FirstOrDefault(Function(r) r.Checked = True)

это вернет Checked RadioButton в GroupBox

Обратите внимание, что это запрос LINQ, и вы должны иметь

Imports System.Linq

Если вы этого не сделаете, ваша IDE / компилятор может указать, что OfType не является членом System.Windows.Forms.Control.ControlCollection

7 голосов
/ 24 июня 2011

Если вы добавите их (например, событие загрузки) в список, вы можете использовать LINQ:

Dim checkedRadioButton as RadioButton
checkedRadioButton = 
    radioButtonList.FirstOrDefault(Function(radioButton) radioButton.Checked))

Это должно быть в порядке, поскольку проверяется не более одного.

EDIT Еще лучше: просто запросите коллекцию Controls GroupBox:

Dim checkedRadioButton as RadioButton
checkedRadioButton = 
    groupBox.Controls.OfType(Of RadioButton)().FirstOrDefault(Function(radioButton) radioButton.Checked))

Имейте в виду, что это вызовет проблемы, если в групповой коробке нет кнопок RadioBut!

6 голосов
/ 09 ноября 2012
'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
2 голосов
/ 07 августа 2012

Я знаю, что это тег vb.net, но вот пример c #

var checkedButton = GroupBox1.Controls.OfType<RadioButton>()
                                      .FirstOrDefault(rb => rb.Checked);
1 голос
/ 24 июня 2011

Вот тестовая программа с групповой коробкой с четырьмя переключателями.

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
0 голосов
/ 02 сентября 2017
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
0 голосов
/ 26 марта 2017

Я создал три радиокнопки из имен элементов из таблицы. Я также создаю обработчик событий для этого. Теперь, когда я пытаюсь узнать, какая кнопка проверяется по ее текстовому значению в msgbox. Она показывает правильное имя, но дважды выскакивает 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
0 голосов
/ 07 августа 2015
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
0 голосов
/ 17 октября 2014

Есть 3 кнопки RadioButton1, RadioButton2 и 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
0 голосов
/ 01 апреля 2013

У меня есть простой и легкий

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...