I have these groupboxes:
I want to run some code according to checked
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.
Rather than checking all RadioButtons, use the Validated event of the GroupBox.
private void grpBox_Validated(object sender, EventArgs e)
{
GroupBox g = sender as GroupBox;
var a = from RadioButton r in g.Controls where r.Checked == true select r.Name;
strchecked = a.First();
}
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
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);
In my opinion, it's better if you use RadioGroup instead of GroupBox. If you use radioGroup, you can always find the selected item easily like this:
radioGroup.selectedIndex;
If you design using Windows Forms, I suggest to implement RadioGroup behavior like this (please note that my code is in Java):
for (Component comp:groupBox1.components) {
if (((RadioButton)comp).selected)
return ((RadioButton)comp).value;
}
You can put this code block in a method to return selected radioButton value, and then you can use this value in your SWITCH part.