C# C中的复选框#
如何在不触发check changed函数的情况下动态检查复选框?我有20个动态创建的复选框,我有一个下拉列表,确定要选中多少个复选框 如果我选择3并单击第6个复选框,则应选中复选框9、7和8。在这个过程中,我不想触发checkchanged函数C# C中的复选框#,c#,winforms,C#,Winforms,如何在不触发check changed函数的情况下动态检查复选框?我有20个动态创建的复选框,我有一个下拉列表,确定要选中多少个复选框 如果我选择3并单击第6个复选框,则应选中复选框9、7和8。在这个过程中,我不想触发checkchanged函数 CheckBox cb1 = (CheckBox)sender; selectedbox = int.Parse(cb1.Name); for (int i = 1; i < selectedquantity; i++) { premi
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++;
}
复选框cb1=(复选框)发送方;
selectedbox=int.Parse(cb1.Name);
对于(int i=1;i
当复选框的状态发生变化时,您无法阻止它触发事件。考虑在不需要的时候取消订阅:
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;
我看不出真正的解决办法是如何不触发事件。您可以使用-=禁用事件,然后使用+=再次添加它
checkBox.CheckedChanged -= checkBox_CheckedChanged;
checkBox.Checked = true;
checkBox.CheckedChanged += checkBox_CheckedChanged;
这样做的最大缺点是,如果希望在更新值时发生一次此事件,则必须手动触发该事件
我希望在类中设置一个标志,并在更新代码中检查该标志。删除附加的事件,然后在更改检查后附加它:
{
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
}
重新订阅(取消订阅/订阅)技术不是很好,因为您必须处理每个事件处理程序,使其变得通用,添加标志,等等
真正简单的做法是使用另一个事件-单击
,简单地检查用户对控件所做的更改:
很明显,如果数据是以编程方式更改的,那么您必须实现不同的模式来实际处理数据(保存数据或对更改作出反应)。在上面的示例中,单击checkBox2
将运行处理程序,例如,您可以在其中将某些内容保存到配置中,而设置checkBox2.Checked=true
,当单击checkBox1
时,将不会运行该处理程序
可能会发生这样的情况,对于某些
复选框
,您将只使用单击
,对于其他人-仅检查更改
无论您是否需要,都将触发检查更改
事件。
{
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
}
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
}