У меня сейчас тоже очень похожая проблема, однако, в ответ на Тимви, это не код, выполняющий проверку.Я проходил через это очень медленно, и когда код срабатывает при нажатии на флажок, он утверждает, что проверил его.Но когда форма возобновляется, она снова не проверяется.Прочитав сообщение Тимви, он привел меня к ответу.Не код выполняет непроверенную проверку, а событие winforms, запускающее впоследствии, которое снимает флажок.Это исправляет это:
Мой код:
private bool allowCheck = false;
private bool preventOverflow = true;
private void lstvwRaiseLimitStore_MouseClick(object sender, MouseEventArgs e)
{
preventOverflow = false;
ListViewItem item = lstvwRaiseLimitStore.HitTest(e.X, e.Y).Item;
if (item.Checked)
{
allowCheck = true;
item.Checked = false;
}
else
{
allowCheck = true;
item.Checked = true;
}
}
private void lstvwRaiseLimitStore_ItemChecked(object sender, ItemCheckedEventArgs e)
{
if (!preventOverflow)
{
if (!allowCheck)
{
preventOverflow = true;
e.Item.Checked = !e.Item.Checked;
}
else
allowCheck = false;
}
}
Итак, что он делает, сначала я должен установить флаг, чтобы предотвратить переполнение, в противном случае, когда форма создается или когда вы снимаете галочкуОкно, проверяющее флажок, продолжает циклировать код и в конечном итоге переполняет стек.Следующий флаг - это фактическая проверка разрешения флажка с помощью вашего кода, а не с помощью другого метода.
Нажав на элемент, он определяет, где был щелчок, а затем устанавливает флаг, позволяющий выполнить проверку.Затем код устанавливает флажок, и раздел проверенных элементов запускается, потому что это было сделано нашим кодом, он ничего не делает, только сбрасывает флаг allowcheck.
Если вы нажали на строку, она больше ничего не делает, однакоесли это был флажок, в конце нашего кода функция Windows запускается и пытается установить флажок, поскольку флаг allowcheck имеет значение false, код сначала устанавливает флаг, чтобы сказать, что я уже запрещаю проверку, а затем сбрасываетпроверка обратно в первоначальный статус.Поскольку это сделано, событие itemchecked запускается снова, но код установил флаг, чтобы он ничего не делал.Затем код завершается, и он не позволяет Windows установить флажок и разрешает только наш код.
Надеюсь, это поможет!