winform valor not net how control check asignar c# winforms radio-button oncheckedchanged

c# - valor - Botón de radio marcado evento cambiado evento dispara dos veces



radio button.net c# (6)

Por favor, lea mi pregunta no es un duplicado.

Tengo tres botones de opción en el formulario de Windows y todos estos botones tienen asociado el evento ''CheckedChanged'' común. Cuando hago clic en cualquiera de estos botones de opción, se activa el evento ''CheckedChanged'' dos veces.

Aquí está mi código:

private void radioButtons_CheckedChanged(object sender, EventArgs e) { //My Code }

Inserté el punto de interrupción y todo el código dentro de este evento se repite dos veces. Por favor, dime por qué se está comportando así?


CheckedChanged se eleva siempre que la propiedad Checked cambie. Si selecciona un RadioButton, entonces el RadioButton seleccionado previamente no está marcado (activado CheckedChanged), y luego el nuevo RadioButton se activa (activado CheckedChanged).


Como dicen correctamente los demás respondedores, el evento se dispara dos veces porque cada vez que se presiona un RadioButton dentro de un grupo, otro no se verifica, por lo tanto, el evento cambiado marcado se disparará dos veces.

Para realizar solo un trabajo dentro de este evento para el RadioButton que se acaba de seleccionar, puede mirar el objeto remitente, haciendo algo como esto:

void radioButtons_CheckedChanged(object sender, EventArgs e) { RadioButton rb = sender as RadioButton; if (rb != null) { if (rb.Checked) { // Only one radio button will be checked Console.WriteLine("Changed: " + rb.Name); } } }


Para evitarlo, simplemente compruebe si radioButton está marcado.

por ejemplo:

private void radioButton1_CheckedChanged(object sender, EventArgs e) { if (radioButton1.Checked == true) //your code }


Podría establecer la propiedad AutoCheck verdadera para cada RadioButton y luego detectar el evento Click en lugar del evento CheckChanged. Esto aseguraría que solo se active un evento, y la lógica en el controlador puede convertir al remitente para que escriba RadioButton si es necesario para procesar el clic. A menudo, la conversión puede evitarse si la lógica del controlador es simple. Aquí hay un ejemplo que maneja tres controles, rbTextNumeric, rbTextFixed y rbTextFromFile:

private void rbText_Click(object sender, EventArgs e) { flowLayoutPanelTextNumeric.Enabled = rbTextNumeric.Checked; txtBoxTextFixed.Enabled = rbTextFixed.Checked; flowLayoutPanelTextFromFile.Enabled = rbTextFromFile.Checked; }


Se dispara una vez para la transición del botón de radio de marcado a no marcado, y nuevamente para la transición del botón de radio de no marcado a activado (es decir, cualquier cambio en el estado marcado desencadena el evento)


{ public partial class Form3 : Form { public Form3() { InitializeComponent(); } int click = 0; private void radioButton1_Click(object sender, EventArgs e) { click++; if (click %2==1) { radioButton1.Checked = true; } if (click %2==0) { radioButton1.Checked = false; } if (radioButton1.Checked==true) { label1.Text = "Cheked"; } if (radioButton1.Checked==false) { label1.Text = "Uncheked"; } } } }