How do I get which radio button is checked from a groupbox?

87,704

Solution 1

You can find all checked RadioButtons like

var buttons = this.Controls.OfType<RadioButton>()
                           .FirstOrDefault(n => n.Checked);

Also take a look at CheckedChanged event.

Occurs when the value of the Checked property changes.

Solution 2

groupbox1.Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked).Name

this will get the name of checked radio button. If you want to use it later, you might store name of that by storing into variable.

Cheers🍻

Solution 3

You should take some look at the CheckedChanged event to register the corresponding event handler and store the Checked radio button state in some variable. However, I would like to use LINQ here just because you have just some RadioButtons which makes the cost of looping acceptable:

var checkedRadio = new []{groupBox1, groupBox2}
                   .SelectMany(g=>g.Controls.OfType<RadioButton>()
                                            .Where(r=>r.Checked))
// Print name
foreach(var c in checkedRadio)
   System.Diagnostics.Debug.Print(c.Name);
Share:
87,704
Amit Bisht
Author by

Amit Bisht

MyExperience Ex; foreach(Day day in MyLife) { Ex = new Experiences(); day.Add(Ex); }

Updated on March 22, 2020

Comments

  • Amit Bisht
    Amit Bisht over 4 years

    I have these groupboxes:

    Enter image description here

    I want to run some code according to checked true state of a radio button like:

    string chk = radiobutton.nme; // Name of radio button whose checked is true
    switch(chk)
    {
        case "Option1":
            // Some code
            break;
    
        case "Option2":
            // Some code
            break;
    
        case "Option3":
            // Some code
            break;
    }
    

    Is there any direct way so that I can only get the name of the checked radio button?

  • Amit Bisht
    Amit Bisht almost 11 years
    i am using windows forms and there is no option of radio group
  • César Amorim
    César Amorim almost 10 years
    @Soner I tried to use this code, but it provides a error of ambiguity between ´Forms.RadioButton´ and ´Controls.RadioButton´ , what does it means?
  • Soner Gönül
    Soner Gönül almost 10 years
    @CésarAmorim Both System.Windows.Controls and System.Windows.Forms have RadioButton class. I feel like, in your project both these namepsaces are added and compiler confuses which namespace belongs on this RadioButton when you type it only it's name. As a solution, you can use it's full name to prevent this situation like System.Windows.Controls.RadioButton or System.Windows.Forms.RadioButton.
  • Ignas Vyšnia
    Ignas Vyšnia almost 9 years
    Had some trouble following this for Universal Windows Apps, as Windows.UI.Xaml.Controls.Page doesn't have Controls property there, so it's best to use some encapsulating WPF element, like named StackPanel or Grid and Children property: rbPanel.Children.OfType<RadioButton>().FirstOrDefault(r => r.IsCheked.Value); (IsChecked is nullable, hence the .Value)
  • Paul Alexander
    Paul Alexander over 7 years
    Would someone be able to explain the .FirstOrDefault(n => n.Checked); line for me please?
  • Soner Gönül
    Soner Gönül almost 4 years
    @PaulAlexander OfType<RadioButton> method returns IEnumerable<RadioButton> which means an iterable collections of RadioButton's. FirstOrDefault method returns the first element (or default if can't find any element satisfied that condition) which satisfied with given condition, which is n.Checked (that means checked) in our case. Based on radio button structure, it can be only one selected item, so this code does exactly what OP wants. For more information, check Enumerable class from MSDN: docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable