J'ai ces groupbox:
Je veux exécuter du code selon l'état vérifié d'un bouton radio comme:
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;
}
Existe-t-il un moyen direct de ne recevoir que le nom du bouton radio coché?
Vous pouvez trouver tous les boutons radio cochés comme
var buttons = this.Controls.OfType<RadioButton>()
.FirstOrDefault(n => n.Checked);
Jetez également un coup d'œil à CheckedChanged
event.
Se produit lorsque la valeur de la propriété Checked est modifiée.
Vous devriez jeter un coup d'œil à l'événement CheckedChanged
pour enregistrer le gestionnaire d'événements correspondant et stocker l'état du bouton radio Checked
dans une variable. Cependant, je voudrais utiliser LINQ ici simplement parce que vous n’avez que quelques RadioButtons
qui rendent le coût du bouclage 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);
Plutôt que de vérifier tous les boutons radio, utilisez l'événement Validated de la 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();
}