Как я могу немедленно/реактивно определить, был ли выбран какой-либо элемент CheckedBoxListItem?

Я хочу включить кнопку, только если сначала были выбраны допустимые критерии (приложение С# Windows Forms). У меня есть этот код (сначала я попробовал события IndexChanged и ValueChanged, но этот ответ указывает, что нужно отслеживать событие ItemCheck:

private void checkedListBoxUnits_ItemCheck(object sender, ItemCheckEventArgs iceargs)
{
    buttonGenRpts.Enabled = ValidSelections();
}

private bool ValidSelections()
{
    bool OneUnitSelected = checkedListBoxUnits.CheckedItems.Count == 1;
    . . .

OneUnitSelected всегда имеет значение false, даже после выбора элемента (флажка) в элементе CheckListBoxUnits. Кажется, что эти события срабатывают до того, как флажок установлен. Итак, какое событие я могу использовать, чтобы убедиться, что элемент отмечен в CheckedListBox?


person B. Clay Shannon    schedule 22.12.2015    source источник


Ответы (1)


Это немного хакерски, но вы можете отложить запуск ValidSelections до завершения проверки:

private void checkedListBoxUnits_ItemCheck(object sender, ItemCheckEventArgs iceargs)
{
    BeginInvoke(() => {
        buttonGenRpts.Enabled = ValidSelections();
    });
}
person adv12    schedule 22.12.2015