У меня есть список объектов UserControl; при щелчке по пункту меню для перехода в другой раздел приложения выполняется следующее:
- Установить текущий отображаемый пользовательский контроль на видимый
- Очистить список элементов управления главной панели
- Новый запрошенный элемент управления (если он еще не создан в списке)
- Добавить новый элемент управления в список элементов управления основных панелей
- Закрепить новый элемент управления, чтобы заполнить
- Установить новый элемент управления видимым
Я сделал это, потому что ранее все области приложения не были пользовательскими элементами управления, а были просто коллекциями элементов управления в TabControl. Базовый код был чудовищным (код в frmMain был 13000+ строк).
Хорошо работает. Все элементы управления (какими были бы каждая вкладка раньше) управляют своим собственным поведением, каждый элемент управления имеет небольшой объем кода. Я могу иметь сексуальное меню. Все хорошие вещи.
Однако, очевидно, есть проблема. Раньше tabcontrol загружался при запуске, и все вкладки отображались (но не были видны). В частности, на одной вкладке имеется элемент управления расписанием, и на прорисовку и настройку макета уходит около 3-4 секунд. Теперь, когда элементы управления загружены и показаны по мере необходимости, при первом просмотре этого конкретного элемента управления вы видите его загрузку и настройку его размера / форматирования / и т. Д. Что вряд ли эстетично.
У меня вопрос: как я могу загрузить и отобразить этот элемент управления, чтобы он отображал и вычислял свой макет, но без фактического отображения пользователя?
Я пробовал простые вещи, такие как:
ScheduleWindow scheduler = new ScheduleWindow() { Visible = false; }
mainPanel.Controls.Add(scheduler);
scheduler.Visible = true;
Я пытался создать и загрузить элемент управления в своем собственном потоке (с многочисленными трудностями), и он все еще ничего не делал ...
Есть ли способ достичь того, что я ищу?