繁体   English   中英

停止使用radioButton CheckedChanged事件再次调用函数吗?

[英]Stop double call to function using radioButton CheckedChanged events?

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

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

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

码:

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上的后期标记,但仍可以使用相同的方法(如果(labelVal = value)return;)
一般使用的公共财产

private string labelVal = string.empty;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM