停止使用radioButton CheckedChanged事件对函数的双重调用



我有三个单选按钮,都放在一个组框中(所以一次只能标记一个)。我的代码正在运行,但为了更快地更新标签,我想在选择新的radioButton时阻止函数被调用两次。

例如,在我下面的代码中,我的默认值是rb1,然后我单击rb2,rb1的CheckedChanged事件触发并更新标签,然后rb2的CheckedChanged事件再次触发并更新该标签(相同值)。

如果标签已经更新过一次,那么在其中添加一些额外的条件,然后停止再次调用函数的最佳方法是什么?

代码:

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();
    }
}

编辑:为了澄清,这是我在中使用的C#Winforms应用程序

考虑这个

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();
        }
    }
}

将您的条件更改为:

if (cmbLetterType.Text.Length != 0 && rb1.Checked)

对其他2个处理程序也执行此操作(使用rb2.Checked和rb3.Checked),每个处理程序只有在成为已检查而不是未检查时才会启动。

事件正在执行告诉他们执行的操作

如果您不想更新标签两次,请不要
很简单,如果值没有更改,则不更新
保存值并测试更改

为什么有三个相同的事件处理程序
您可以将多个事件关联到同一处理程序。

即使你使用Baldrick的方法,你也可以从发件人那里获得按钮。

WinForm上的Late标记,但仍然可以使用相同的方法(如果(labelVal=value)return;)
一般使用的公共财产

private string labelVal = string.empty;
public string LabelVal
{
    get { return labelVal; } 
    set
    { 
        if (labelVal = value) return;
        labelVal = value;
        NotifyPropertyChanged("LableVal");
    }
}

最新更新