A veces, en situaciones así echo de menos mi juventud, cuando Access era mi veneno de elección, y podía darle a cada botón de radio de un grupo su propio valor.
Mi truco en C# es usar la etiqueta para establecer el valor, y cuando hago una selección del grupo, leo el valor de la etiqueta del botón de radio seleccionado. En este ejemplo, directionGroup es el grupo en el que tengo cuatro cinco botones de opción con "Ninguno" y "NE", "SE", "NW" y "SW" como las etiquetas en los otros cuatro botones de radio.
Proactivamente utilicé un botón para capturar el valor del botón marcado, porque porque asignar un controlador de eventos a todos los eventos de botones CHeckCHanged hace que CADA botón se dispare, porque cambiar uno los cambia a todos. Entonces, el valor del emisor es siempre el primer RadioButton en el grupo. En cambio, utilizo este método cuando necesito saber cuál se selecciona, con los valores que deseo recuperar en la propiedad Etiqueta 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());
}
FYI, lo he probado y lo he usado en mi trabajo.
Joey
El código subyacente no sabe cuál de ellos para desmarcar, sólo se repite todos los controles RadioButton por debajo de la misma matriz del control cambiada y desactiva la anterior ya marcada. –
¿Estás usando WinForms o ASP.Net? – SLaks