То, что вы описываете, - волшебник, и вы можете исследовать подход из Эрик Дж.
Однако, когда у меня есть случаи, когда я хочу, чтобы в моем интерфейсе было несколько панелей в одном и том же пространстве, и я хочу переключаться между ними в конструкторе, мне нравится использовать TabControl и скрывать вкладки в TabControl. Это упрощает управление пользовательским интерфейсом во время разработки, а код довольно просто переключать между вкладками во время выполнения.
Я сделал пользовательский элемент управления, производный от TabControl, под названием HiddenTabsControl, который очень прост. Класс только переопределяет WndProc и позволяет базовому классу TabControl обрабатывать все остальное. Все, что вам нужно сделать, это:
- Добавить новый элемент в ваш проект
- Выберите пользовательский элемент управления,
- Назовите это как HiddenTabsControl.
- Измените базовый класс на TabControl, удалите конструктор и переопределение OnPaint, добавленное Visual Studio.
Скопируйте это переопределение для WndProc в класс:
protected override void WndProc(ref Message m)
{
// Hide tabs by trapping the TCM_ADJUSTRECT message
if (m.Msg == 0x1328 && !DesignMode)
{
m.Result = (IntPtr)1;
}
else
{
base.WndProc(ref m);
}
}
Теперь вы можете изменять вкладки в конструкторе и легко создавать пользовательский интерфейс, а в коде вы можете обрабатывать события для изменения вкладок по мере необходимости. Изменение выбранной вкладки легко сделать с помощью:
this.hiddenTabsControl.SelectedTab = this.tabPageYouWantVisible;
Одним из побочных эффектов удаления вкладок является пространство, занимаемое вкладками при создании элемента управления. Удаление их приведет к изменению пространства, занимаемого HiddenTabsControl, за счет его уменьшения. Я обычно устанавливаю Anchor of HiddenTabsControl в нижнюю часть, чтобы он не уменьшался.