Проблема вызвана вашим Remove()
методом, то есть у вас есть ByRef
параметр (по какой-то причине) .При использовании ByRef
любые изменения, внесенные в параметр внутри метода, должны отражаться в переменной, которая была передана в метод.Это происходит путем переназначения значения на исходную переменную.
В вашем случае это работает так:
- Вызван метод
Remove()
иему передается переменная (Cases(caseIndex)
). - Некоторая работа выполняется внутри метода
Remove()
, который может или не включать изменение значения параметра BeltCase
. - Значение параметра
BeltCase
переназначается переменной, которая первоначально была передана методу (то есть Cases(caseIndex)
) . - В результатеНа предыдущем шаге установщик свойства
BeltCase
вызывается с Index = 2
, что вызывает исключение вне диапазона, поскольку Cases(2)
не существует (был удален).
Для подтверждения,Вы можете увидеть, как эта проблема исчезла, когда вы замените эту строку:
Cases.Remove(Cases(caseIndex))
.. на:
Dim myCase As CaseClass = Cases(caseIndex)
Cases.Remove(myCase)
Таким образом, вы создадите новую переменную, которая ссылается на тот же CaseClass
object и самое главное избегайте вызова установщика вашего свойства Collection.BeltClase
.
HoВ любом случае, лучшим решением было бы не использовать ByRef
, во-первых, , поскольку в этой ситуации он вам, кажется, не нужен .Итак, просто используйте Public Sub Remove(ByVal BeltCase As CaseClass)
.
Проверьте этот вопрос , чтобы узнать больше о ByVal
и ByRef
с объектами.
И последнее, пожалуйста, не делайтеТвой класс Collection
, потому что это может смутить любого, кто смотрит на твой проект.