复选框中的C#

时间:2014-01-13 09:35:26

标签: c# winforms

如何动态检查框而不触发检查更改功能?我有20个动态创建的复选框,我有一个下拉菜单,用于确定要检查的复选框数。

如果我选中3并单击第6个复选框,则应选中复选框9,7和8.在此过程中,我不想触发checkchanged功能。

CheckBox cb1 = (CheckBox)sender;
selectedbox = int.Parse(cb1.Name);

for (int i = 1; i < selectedquantity; i++)
{
    premiumticket[selectedbox].Checked = true; 
    //here check changed firing  i dont want that
    selectedbox++;
}

4 个答案:

答案 0 :(得分:8)

当状态发生变化时,您无法阻止CheckBox触发事件。当您不需要时,请考虑取消订阅活动:

for (int i = 0; i < selectedquantity; i++)
{
     premiumticket[selectedbox + i].CheckedChanged -= checkBox_CheckedChanged;
     premiumticket[selectedbox + i].Checked = true;
     premiumticket[selectedbox + i].CheckedChanged += checkBox_CheckedChanged;
}

如果您不需要,请使用某些标记来省略事件处理:

flag = false;

for (int i = 0; i < selectedquantity; i++)    
     premiumticket[selectedbox + i].Checked = true;         

flag = true;

在处理程序中:

private void checkBox_CheckedChanged(object sender, EventArgs e)
{
    if (!flag)
       return;

    //...
}

答案 1 :(得分:1)

我无法看到真正的解决方案如何不发射事件。您可以使用 - =禁用该事件,然后使用+ =。

再次添加它
 checkBox.CheckedChanged -= checkBox_CheckedChanged;
 checkBox.Checked = true;
 checkBox.CheckedChanged += checkBox_CheckedChanged;

这样做的一大不足之处在于,如果您希望在更新值时有一次此事件,则必须手动触发事件。

我宁愿在类中设置一个标志,并在更新代码中检查此标志。

答案 2 :(得分:0)

删除附加的事件,然后在更改检查后附加它:

{
    cb1.CheckedChanged -= new EventHandler(cb1_CheckedChanged);
    premiumticket[selectedbox].Checked = true;
    cb1.CheckedChanged += new EventHandler(cb1_CheckedChanged);
}



private void cb1_CheckedChanged(object sender, EventArgs e)
{
                // Some COde
}

答案 3 :(得分:0)

重新订阅(取消订阅/订阅)技术并不是很好,因为你必须处理每个事件处理程序,使其通用,添加标志等。

真正简单的做法是使用另一个事件 - Click - 简单地检查控件的更改由用户制作:

    private void checkBox1_Click(object sender, EventArgs e)
    {
        checkBox2.Checked = checkBox1.Checked;
        checkBox3.Checked = false;
    }
    private void checkBox2_Click(object sender, EventArgs e)
    {
        // this is not called when you set "Checked" programmatically
    }

很明显,如果以编程方式更改,您需要实现不同的模式,实际对数据执行某些操作(保存或对更改做出反应)。在上面的示例中,点击checkBox2将运行处理程序,例如,您可以将某些内容保存到配置中,而在设置checkBox2.Checked = true时,单击checkBox1则不会。

可能会发生,对于某些CheckBox,您将仅使用Click,而对其他人仅使用CheckedChanged