Às vezes, em situações como essa, sinto falta da minha juventude, quando o Access era meu veneno de escolha, e eu poderia dar a cada botão de opção em um grupo seu próprio valor.
Meu hack em C # é usar a tag para definir o valor, e quando eu faço uma seleção no grupo, eu leio o valor da tag do radiobutton selecionado. Neste exemplo, directionGroup é o grupo no qual tenho quatro cinco botões de opção com "Nenhum" e "NE", "SE", "NW" e "SW" como as tags nos outros quatro botões de opção.
Usei proativamente um botão para capturar o valor do botão marcado, porque atribuir um manipulador de eventos a todos os eventos CHeckCHanged dos botões faz com que CADA botão seja disparado, porque alterar um deles altera todos. Portanto, o valor de sender é sempre o primeiro RadioButton do grupo. Em vez disso, uso esse método quando preciso descobrir qual está selecionado, com os valores que desejo recuperar na propriedade Tag de cada RadioButton.
private void ShowSelectedRadioButton()
{
List<RadioButton> buttons = new List<RadioButton>();
string selectedTag = "No selection";
foreach (Control c in directionGroup.Controls)
{
if (c.GetType() == typeof(RadioButton))
{
buttons.Add((RadioButton)c);
}
}
var selectedRb = (from rb in buttons where rb.Checked == true select rb).FirstOrDefault();
if (selectedRb!=null)
{
selectedTag = selectedRb.Tag.ToString();
}
FormattableString result = $"Selected Radio button tag ={selectedTag}";
MessageBox.Show(result.ToString());
}
Para sua informação, testei e usei isso em meu trabalho.
Joey