CheckedListBox выбрасывает аргумент за пределы диапазона, когда он не должен

Это проект Winforms .NET 3.5.

У меня странная ошибка при попытке программно установить флажки в списке флажков.

for (int i = 0; i < 5; i++)
{
    cBListForming.Items.Add((i + 1).ToString());
    cBListForming.SetItemChecked(i, true);
}

Таким образом, он добавляет 5 элементов, от 1 до 5, а затем по умолчанию устанавливает добавленные флажки. Ничего удивительного.

На первой итерации цикла все работает нормально, но на второй итерации (i == 1) SetItemChecked выдает исключение.

System.ArgumentOutOfRange {"Индекс вышел за пределы диапазона. Он должен быть неотрицательным и меньше размера коллекции.\r\nИмя параметра: индекс"}

Я также вижу, что первый флажок установлен визуально. Остальные не из-за вышеуказанного исключения.

Это довольно сбивает с толку. Просто в целях тестирования я попытался сначала добавить элементы, а затем программно проверить их с помощью второго цикла, но все равно возникает та же проблема, хотя счетчик флажка равен 5.

Вместо этого я попытался использовать SetItemCheckState. Опять та же проблема.

Я думаю, что, возможно, я сломал сам компонент CheckedListBox или какую-то странную ошибку фреймворка, с которой я столкнулся.

Любое понимание того, что здесь происходит, будет очень признательно.


person l46kok    schedule 24.07.2013    source источник
comment
Я попытался запустить ваш код без добавления cbList и без ошибок, поэтому, возможно, происходит что-то еще, что вы можете не заметить. Я запустил код в вашем цикле for, звучит как ошибка дизайнера, когда вы добавляли или удаляли элементы управления   -  person MethodMan    schedule 24.07.2013
comment
Вы реализовали какое-либо событие, чтобы поймать CheckedChanged или что-то, что срабатывает, когда вы меняете checkState флажка?   -  person jparthj    schedule 24.07.2013


Ответы (3)


Это довольно неприятно, но на самом деле это оказалось ошибкой фреймворка (возможно, у Winforms Designer была икота).

Удаление и чтение checklistbox в дизайнере заставило его работать. Никаких других изменений.

person l46kok    schedule 24.07.2013
comment
Спасибо за ваше сообщение. Точно такая же проблема была и у меня. Я скопировал CheckedListBox в дизайнере из соображений компоновки. Хотя подсчет сказал, что в списке больше элементов, он выдал исключение вокруг подсчета индекса, который, вероятно, имеет поле, из которого я его скопировал. - person TurmDrummer; 27.08.2019

Попробуйте следующее:

for (int i = 0; i < 5; i++)
{
    cBListForming.Items.Add((i + 1).ToString(), true);
}
person Adel Khayata    schedule 24.07.2013
comment
Аналогичная проблема. Первый добавляется (и также проверяется), но на второй итерации выбрасывает argumentsoutofrange. - person l46kok; 24.07.2013
comment
Не могли бы вы упомянуть какие-либо свойства/события, используемые для этого элемента управления? - person Adel Khayata; 24.07.2013

Я предполагаю, что "cBListForming" - это список флажков.

Проверьте количество флажков, которые у вас есть. Это может быть причиной проблемы.

cBListForming.Count();
person Jack Frost    schedule 24.07.2013
comment
Пожалуйста, прочтите вопрос. Я прямо заявил следующее: даже несмотря на то, что счетчик флажка равен 5.. - person l46kok; 24.07.2013
comment
Простите за это. Я не заметил выделенного жирным шрифтом. Виноват. Просто хочу спросить, используете ли вы список флажков или элемент управления CheckListbox msdn.microsoft.com/en-us/library/ - person Jack Frost; 24.07.2013