Я сохраняю логическое значение в классе, чтобы отслеживать, когда действия выполняются пользователем или автоматически системой. Всякий раз, когда я собираюсь изменить, например, CheckBox.Checked, я устанавливаю значение Boolean равным True, затем после завершения возвращаюсь к False.
В обработчике событий Checked я проверяю, произошло ли событие, в то время как логическое значение true, чтобы определить, какой код выполнять.
private Boolean blnSystem = false;
private void SystemChanges()
{
try
{
blnSystem = true;
//Code which changes listBox1 Item Checked values
}
catch
{
//Error handler
}
finally
{
blnSystem = false;
}
}
private void listBox1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
if (!blnSystem) //Should check if item was clicked.
{
//Do some stuff
}
else //If the event was fired because I changed the Checked property from the code
{
//Do some other stuff
}
}