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