c# - validar - ¿Detener la doble llamada para funcionar con eventos de RadioButton CheckedChanged?
validar radio button c# (3)
Cambie su condición a:
if (cmbLetterType.Text.Length != 0 && rb1.Checked)
Haga esto también para los otros 2 manipuladores (usando rb2.Checked y rb3.Checked) y cada uno solo disparará cuando sea el que se verifique , no desmarcado .
Tengo 3 botones de radio en un grupo (por lo que solo se pueden marcar 1 a la vez). Tengo mi código funcionando, pero para acelerar la actualización de mi etiqueta, quiero evitar que la función se llame dos veces cuando se selecciona un radioButton nuevo.
Por ejemplo, en mi código a continuación, mi valor predeterminado es rb1 y luego hago clic en rb2, el evento rb1 CheckedChanged activa y actualiza la etiqueta, luego el evento CheckedChanged de rb2 dispara y actualiza la etiqueta nuevamente (mismo valor).
¿Cuál sería la mejor manera de agregar algunos criterios adicionales a dónde si la etiqueta se ha actualizado una vez, y luego evitar que se vuelva a llamar?
CÓDIGO:
private void rb1_CheckedChanged(object sender, EventArgs e)
{
if (cmbLetterType.Text.Length != 0)
{
updatePrintedCntLabel();
}
}
private void rb2_CheckedChanged(object sender, EventArgs e)
{
if (cmbLetterType.Text.Length != 0)
{
updatePrintedCntLabel();
}
}
private void rb3_CheckedChanged(object sender, EventArgs e)
{
if (cmbLetterType.Text.Length != 0)
{
updatePrintedCntLabel();
}
}
EDITAR: Para aclarar, esta es una aplicación C # Winforms en la que estoy haciendo esto.
Considera esto
public class Form1 : Form
{
public Form1()
{
rb1.CheckedChanged += rb_CheckedChanged;
rb2.CheckedChanged += rb_CheckedChanged;
rb3.CheckedChanged += rb_CheckedChanged;
}
private void rb_CheckedChanged(object sender, EventArgs e)
{
if (!((Radiobutton)sender).Checked) return;
if (cmbLetterType.Text.Length != 0)
{
updatePrintedCntLabel();
}
}
}
Los eventos están haciendo lo que les dicen que hagan
Si no quiere actualizar la etiqueta dos veces, no lo haga
Simple, si el valor no cambió, no actualice
Guarde el valor y pruebe el cambio
¿Por qué tienes tres manejadores de eventos idénticos?
Puede conectar múltiples eventos al mismo controlador.
Incluso si usa el enfoque de Baldrick, puede obtener el botón del remitente.
Última etiqueta en WinForm pero todavía puede usar el mismo enfoque (if (labelVal = value) return;)
En propiedades públicas de uso general
private string labelVal = string.empty;
public string LabelVal
{
get { return labelVal; }
set
{
if (labelVal = value) return;
labelVal = value;
NotifyPropertyChanged("LableVal");
}
}