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

Я хочу включить кнопку только в том случае, если сначала были выбраны действительные критерии (приложение C# 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 всегда ложно, даже после выбора элемента (флажок элемента управления) в элементе управления selectedListBoxUnits. Кажется, что эти события срабатывают до того, как флажок будет фактически установлен. Так к какому событию я могу подключиться, чтобы убедиться, что элемент проверен в CheckedListBox?

1 ответ

Решение

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

private void checkedListBoxUnits_ItemCheck(object sender, ItemCheckEventArgs iceargs)
{
    BeginInvoke(() => {
        buttonGenRpts.Enabled = ValidSelections();
    });
}
Другие вопросы по тегам