所以这个问题非常简单。我有一个checkedListBox,在ItemCheck上我想调用我的Method UpdateGraph()。问题是,如果我在事件中调用它,它会在项目被视为检查之前运行UpdateGraph方法。由于更新图方法使用foreach(checkListBox.CheckedItems中的var项) 重要的是已经应用了checked或not的新值。
我尝试通过在事件中手动设置新值来解决方法,但这给了我一个StackOverflowException。
private void checkedListBox3_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.NewValue == CheckState.Checked)
{
checkedListBox3.SetItemChecked(e.Index, true);
}
else
{
checkedListBox3.SetItemChecked(e.Index, false);
}
UpdateChart();
}
它在我使用SetItemChecked的行上给了我一个例外。 只是为了重新声明,我希望在UpdateChart()之前检查项目,并且只是调用UpdateChart()似乎不会这样做。有没有任何变通方法可以在项目进入UpdateChart()方法之前检查项目?
编辑:谢谢,我现在明白为什么我现在得到StackOverflowException,但无论如何确保项目采用新的CheckState而不手动将其传递给我的UpdateGraph方法?它是一个通用的方法,不会经常通过我的checkedListBox3_itemCheck事件,所以传入newCheckstate可能会使事情变得复杂。请注意,我可以使用If来检查我的传入值并使用某种类型的标识符来确定是否需要使用它,但如果我在进入之前无法找到任何其他更新检查状态的话,这可能是我的最后一个解决方案方法。
答案 0 :(得分:0)
正如你所指出的那样,在设置值之后没有发生OnItemChecked
事件,所以你必须考虑另一种方式:
您可以将更新方法重构为UpdateGraph(int? changedIndex = null, bool isChecked = false)
这样的方法,您可以将其称为UpdateGraph()
,当前使用它然后
private void checkedListBox3_ItemCheck(object sender, ItemCheckEventArgs e)
{
UpdateGraph(e.Index, e.NewValue == CheckState.Checked);
}
正常评估foreach
后,您可以检查changedIndex == null
并做出相应的反应。