Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Переназначение индексов контролам


Автор: Dumm 16.9.2012, 20:01
Доброго времени суток. Есть такой вопрос - есть массив контролов на форме. Создается пользователем в режиме работы программы (отрабатыет команда "Load <object(Index)>"). Соответственно, пользователь может элементы массива удалять. Но тогда в последовательности элементов возникают разрывы. Например, есть массив из элементов с индексами 1, 2, 3. Удаляем второй элемент и имеем тогда массив из 1 и 3 элементов. Хотелось бы теперь для ликвидации дискретности 3-ий элемент переназначить как 2-ой. Вопрос, как это сделать? Свойство контрола Object.Index существует только для чтения. Вот и спрашивается, можно ли как-то переназначить элементу массива его индекс уже в режиме выполнения программы?

Автор: Akina 16.9.2012, 20:25
А смысл?

Автор: Dumm 16.9.2012, 21:44
Если в цикле идет перебор всех элементов массива, то при обработке уже несуществующего элемента, программа вывалится с ошибкой.

Автор: Akina 16.9.2012, 23:06
Цитата(Dumm @  16.9.2012,  22:44 Найти цитируемый пост)
Если в цикле идет перебор всех элементов массива

Код

For Each OneControl In ControlWithArray

Автор: Dumm 16.9.2012, 23:19
Да, это понятно. Но вот, например, заводится новый элемент. Какой индекс ему указать? Следующий по старшинству, несмотря на наличие свободных номеров внутри последовательности элементов? Тогда получается, что счетчик элементов массива будет постоянно расти. А если операций добавления-удаления элементов много, то в итоге величина счетчика будет запредельна. Как это все разрешить я знаю, но это пути изобретательства. Просто возник вопрос, нельзя ли это все сделать просто. Я так понял, что в VB нельзя запросто так менять индекс контролу в режиме выполнения приложения.

Автор: Akina 17.9.2012, 07:34
Цитата(Dumm @  17.9.2012,  00:19 Найти цитируемый пост)
например, заводится новый элемент. Какой индекс ему указать? Следующий по старшинству, несмотря на наличие свободных номеров внутри последовательности элементов?

Конечно.

Цитата(Dumm @  17.9.2012,  00:19 Найти цитируемый пост)
получается, что счетчик элементов массива будет постоянно расти. А если операций добавления-удаления элементов много, то в итоге величина счетчика будет запредельна.

Если количество ВИЗУАЛЬНЫХ элементов превышает размерность индекса - следует пересмотреть идеологию. Что-то запроектировано неверно.
В качестве же паллиативного решения, например, можно выбрать замену удаления на деактивацию и сокрытие контрола. А когда понадобится - реактивировать его. Новые же добавлять лишь в случае, когда все контролы активны.

Автор: Dumm 17.9.2012, 23:56
Все верно. Есть и другие решения, как, например, создание массива, содержащего номера освободившихся ячеек, но, как я уже сказал, это придумывание выхода из ситуации. В общем, вопросов по данной теме у меня больше нет. Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)