it-swarm.com.de

Wie bekomme ich ein geprüftes Optionsfeld in einer Gruppenbox?

Ich habe viele Optionsfelder in einer Gruppenbox. Normalerweise überprüfe ich jedes Optionsfeld einzeln mit If radiobutton1.Checked = True Then.

Aber ich denke, vielleicht gibt es eine intelligente Methode, um zu prüfen, welches Optionsfeld in einer Gruppenbox markiert ist. Irgendeine Idee?

16
Predator

versuche dies

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

dadurch wird die geprüfte RadioButton in einer GroupBox zurückgegeben.

Beachten Sie, dass dies eine LINQ-Abfrage ist, die Sie haben müssen

Imports System.Linq

Andernfalls weist Ihr IDE/Compiler möglicherweise darauf hin, dass OfType kein Mitglied von System.Windows.Forms.Control.ControlCollection ist.

44
Binil

Wenn Sie sie zu einer Liste hinzufügen (beispielsweise Ereignis laden), können Sie LINQ verwenden:

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

Dies sollte in Ordnung sein, da höchstens ein einziger aktiviert ist.

EDIT Noch besser: Fragen Sie einfach die Controls-Auflistung der GroupBox ab:

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

Beachten Sie, dass dies Probleme verursachen wird, wenn sich keine RadioButtons in der Groupbox befinden!

7
Erno de Weerd
'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
6
Amberlea Moore

Ich weiß, es ist vb.net getaggt, aber hier ist ein c # -Beispiel

var checkedButton = GroupBox1.Controls.OfType<RadioButton>()
                                      .FirstOrDefault(rb => rb.Checked);
2
Loofer

Hier ist ein Testprogramm mit einer Gruppenbox mit vier Optionsfeldern.

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
1
dbasnett

Ich habe einfach und leicht 

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
0
Said Marar

Sie können eine foreach-Schleife ausführen, um mit den Scans der Steuerelemente zu iterieren RadioButton in der GroupBox, siehe Control unten, siehe Beispiel.

    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

Tschüss

0

Ich habe drei Optionsfelder aus den Elementnamen aus einer Tabelle erstellt. Dazu erstelle ich einen Event-Handler. Jetzt, wenn ich versuche zu bekommen, welche Schaltfläche durch ihren Textwert in einer msgbox überprüft wird. Es zeigt den richtigen Namen, aber zweimal die msgbox-Popup-Liste für eine einzelne Auswahl. Ich verwende 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
Deb
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
Ali

Es gibt 3 RadioButtons: RadioButton1, RadioButton2 und 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
SkyMaster