Для этого я использовал контрольные массивы. Создайте отдельный экземпляр каждого типа элемента управления, который вам нужен - текстовое поле, метка, раскрывающийся список и т. Д. Установите для свойства Index каждого элемента управления значение 0 (что превращает каждый элемент управления в базовый элемент управления для массива элементов управления). , Теперь установите для других свойств то, что имеет смысл для каждого типа элемента управления в вашем приложении. Эти свойства будут применяться к каждому новому элементу управления при его создании. Убедитесь, что для свойства Visible установлено значение False.
Затем добавьте элементы управления во время выполнения с помощью оператора Load. Расположите их соответствующим образом, установите любые уникальные свойства, загрузите ваши данные и т. Д., Затем, когда все это будет сделано, просмотрите каждый массив элементов управления по индексу и установите для свойства Visible каждого элемента управления значение True. Это достаточно быстро, чтобы избежать мерцания, по крайней мере, для разумного количества элементов управления. Таким образом, я обработал почти 200 элементов управления без мерцания.
Кроме того, если / когда вам нужно перестроить форму с новыми данными, вместо того, чтобы уничтожать элементы управления с помощью Unload, а затем заново создавать новые, просто сделайте их невидимыми и повторно используйте столько, сколько вам нужно. Таким образом, гораздо быстрее настраиваются свойства для каждого элемента управления, чем каждый раз с нуля.
Да, вам нужно управлять индексом для длины каждого массива элемента управления, чтобы сообщить вам, можете ли вы использовать повторно или создать новый, но пара вспомогательных функций может значительно упростить необходимое отслеживание. Примерно так:
Set newTextBox = GetNextTextBox
, где функция GetNextTextBox обрабатывает отслеживание всех доступных элементов управления текстовым полем, и какой из них «следующий», поэтому он может решить, может ли он повторно использовать существующий или создать новый.
У вас также могут быть такие функции, как, например, ResetTextBoxes, которые делают все текстовые поля невидимыми и сбрасывают счетчик «следующий доступный».