Странное поведение события ItemCheck
При нажатии на CheckBox внутри CheckListBox должно срабатывать событие ExceptionsBox_ItemCheck:
private void ExceptionsBox_ItemCheck(object sender, ItemCheckEventArgs e)
{
Exceptions.Clear();
foreach (var item in ExceptionsBox.CheckedItems)
{
Exceptions.Add(item.ToString());
}
}
Обычно событие срабатывает при нажатии на следующий элемент, как бы с "задержкой в шаг". Как сделать, чтобы событие срабатывало всегда по нажатию на CheckBox?
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Это не задержка, это событие возникает до того как состояние поменяется.
Есть костыль, который я не рекомендую использовать, но он просто есть, можно отложить выполнение тела метода асинхронным способом:
- меняете
voidнаasync void - в начало метода добавляете
await Task.Yield(); - остальной код метода оборачиваете в
try-catch, чтобы не потерять контроль над возникающими исключениями и недопустить падения приложения
А рекомендую сделать что-то такое:
Допустим ни один чекбокс не помечен в изначальном состоянии, а коллекция пуста. Допустим, коллекция это List<string>.
Тогда получится как-то так.
private void ExceptionsBox_ItemCheck(object sender, ItemCheckEventArgs e)
{
var box = (CheckListBox)sender;
var item = box.Items[e.Index].ToString();
if (e.NewValue == CheckState.Checked)
Exceptions.Add(item);
else
Exceptions.Remove(item);
}