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

时间:2013-12-11 15:19:06

标签: c# .net winforms radio-button groupbox

我有3个单选按钮全部保存在一个组框中(因此一次只能标记1个)。我的代码工作正常,但为了更快地更新我的标签,我想在选择新的radioButton时停止调用该函数两次。

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

如果标签已更新一次,那么添加一些额外标准的最佳方法是什么,然后停止再次调用该函数?

CODE:

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应用程序,我正在这样做。

3 个答案:

答案 0 :(得分:4)

考虑一下

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

    }
}

答案 1 :(得分:2)

将您的条件更改为:

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

同样为其他2个处理程序执行此操作(使用rb2.Checked和rb3.Checked),每个处理程序只有在已经检查的情况下才会触发,而不是未选中

答案 2 :(得分:0)

事件正在告诉他们做什么

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

为什么你有三个相同的事件处理程序?
您可以将多个事件连接到同一个处理程序。

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

WinForm上的延迟标记,但仍然可以使用相同的方法(if(labelVal = value)return;)
通常使用公共属性

private string labelVal = string.empty;

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