如何确保在事件方法内呼叫之前进行项目检查



,因此问题确实很简单。我有一个CheckEdListBox,并且在ItemCheck上我想调用我的方法updateGraph()。问题是,如果我在此事件中调用它,它将通过"更新"方法运行,然后将其视为检查。由于"更新图"方法使用foreach(checllistbox中的var项目。重要的是,已经应用了是否已应用的新值。

我通过手动设置新值尝试了解决方法,但是,这给了我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();
}

它在我设置的线路上为我提供了一个例外。只是为了重新确定,我希望在updatechart()之前检查该项目,并且仅调用UpdateChart()似乎没有这样做。有人是否有任何解决方法可以在进入updatechart()方法之前检查该项目?

编辑:谢谢,我现在明白了为什么现在要stackoverflowException,但是无论如何是否有可以确保项目对新的CheckState采用,而无需手动将其传递到我的UpdateGraph方法?这是一种通用的方法,不会始终通过我的checkedlistbox3_itemcheck事件进行,因此进入newcheckstate可能会使事情复杂化。请注意,我只能使用IF检查我的价值并使用某种标识符来确定是否需要使用它,但是如果我找不到其他任何其他内容可以更新检查状态之前,那可能是我的最后解决方案方法。

当您指出的是设置值之后发生的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并做出相应的反应。

最新更新