Проектирование Windows.Form с несколькими панелями -> Как скрыть одну панель (как слой PS) - PullRequest
4 голосов
/ 11 августа 2009

Как я могу скрыть одну панель в Visual Studio 2008 Form Designer как слой в PS? В противном случае, может ли кто-нибудь порекомендовать другой лучший метод для создания нескольких «экранов», которые пользователь должен щелкнуть?

Ответы [ 3 ]

18 голосов
/ 12 августа 2009

То, что вы описываете, - волшебник, и вы можете исследовать подход из Эрик Дж.

Однако, когда у меня есть случаи, когда я хочу, чтобы в моем интерфейсе было несколько панелей в одном и том же пространстве, и я хочу переключаться между ними в конструкторе, мне нравится использовать 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 в нижнюю часть, чтобы он не уменьшался.

2 голосов
/ 21 декабря 2011

Другой менее элегантный, но быстрый способ взлома состоит в том, чтобы просто не добавлять панель в родительскую форму до времени выполнения. При этом дизайнер не знает, где находится панель до компиляции, и она не будет отображаться.

Например, найдите блок кода, в который вы добавляете элементы управления в родительскую форму:

                //this->Controls->Add(this->panel_X);
        this->Controls->Add(this->tabControl);
        this->Controls->Add(this->menuStrip_topMenu);

Прокомментируйте или удалите оператор, затем найдите дескриптор события, которое происходит при загрузке формы:

        this->Load += gcnew System::EventHandler(this, &MainForm::MainForm_Load);

Затем в определении обработчика событий добавьте элемент управления в форму:

System::Void MainForm_Load(System::Object^  sender, System::EventArgs^  e) {
...
...
this->Controls->Add(this->panel_X);
}

При этом я не испытывал никаких нежелательных побочных эффектов, но если у кого-то есть на то веские причины, мне было бы интересно услышать это.

2 голосов
/ 11 августа 2009

Я использовал этот код мастера в недавнем проекте, и он работал хорошо.

Предоставляет базовый опыт, который вам нужен.

...