Как создать форму окна, которая заменяет текущую форму? - PullRequest
0 голосов
/ 03 июня 2018

Я создаю игру, используя Windows Forms, и я чувствую, что самый простой способ создавать разные экраны (Главное меню, Настройки и т. Д.) - использовать отдельную форму для каждого экрана.Я искал много разных способов сделать это.Многие люди говорят об использовании form2.Show(); this.Hide();, однако это создает новое всплывающее окно.Люди также предложили использовать this.IsMdiContainer = true; для создания нового окна внутри текущего окна, но это также не та функциональность, которую я хочу.

РЕДАКТИРОВАТЬ: Другой вопрос, multiple-guis-one-window, немного объясняет, что это может быть достигнуто с помощью UserControls, но не раскрывает никаких примеров или того, что я должен делать.

Я хочу полностью заменить функциональность текущей формы новой.

Есть ли способ достичь этого?Если нет, есть ли хорошая альтернатива?

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

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

У меня есть одна родительская форма и две дочерние формы.дочерние формы должны быть открыты в родительской форме.

  • frmMain (родительская форма)

enter image description here

  • Установить frmMain Свойство следующим образом

    WindowState = System.Windows.Forms.FormWindowState.Maximized

Я взял 3 панели в окне frmMain.

  1. pnlMenu (для меню отображения)

    • Задать pnlMenu.Dock = System.Windows.Forms.DockStyle.Top свойство
    • Установить необходимую высоту этой панели.
  2. pnlMain (для отображения дочерних форм)

    • Набор pnlMain.Dock = System.Windows.Forms.DockStyle.Fill свойство
  3. pnlFooter (Для раздела нижнего колонтитула)

    • Установить pnlFooter.Dock = System.Windows.Forms.DockStyle.Bottom; свойство
    • Установить высоту этой панели, как вам нужно.

У меня естьустановить menubar в pnlMenu (щелкните это меню для отображения дочерней формы в pnlMain)

frmMain.cs

    public void BindFormIntoMainForm(Form Main)
    {
        Main.TopLevel = false;
        Main.WindowState = FormWindowState.Maximized;
        Main.AutoScroll = true;
        pnlMain.Controls.Clear();
        pnlMain.Controls.Add(Main);
        pnlMain.Refresh();
        Main.Show();
    }

    private void childToolStripMenuItem_Click(object sender, EventArgs e)
    {
        frmChildForm1 ChildForm1 = new frmChildForm1();
        BindFormIntoMainForm(ChildForm1);
    }

    private void childForm2ToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        frmChildForm2 ChildForm2 = new frmChildForm2();
        BindFormIntoMainForm(ChildForm2);
    }

BindFormIntoMainForm метод, отвечающий заотобразить дочернюю форму в главном окне.

  • frmChildForm1 &frmChildForm2 (ChildForm)

  • Установить оба свойства формы следующим образом

    FormBorderStyle = System.Windows.Forms.FormBorderStyle.None

Теперь при нажатиив меню дочерней формы 1 затем отобразите следующий вывод: enter image description here

при нажатии на меню дочерней формы 2 затем отобразите следующий вывод: enter image description here

Я думаю, что это может быть полезно для вас.

0 голосов
/ 03 июня 2018

Как я понял, вы хотите сохранить ту же форму и изменить данные внутри этой формы (чтобы не получить эффект, что ваша форма была закрыта и открыта снова).

Проблема в том, что форма Windows неподдерживать такую ​​вещь напрямую (по крайней мере, не оптимальным образом), я бы использовал для этого другие UI-фреймворки.Однако, если вы хотите придерживаться форм Windows, вы можете использовать инструменты GroupBox или Panel (доступные из инструментов дизайна форм Windows в Visual Studio).Здесь вы можете сгруппировать элементы по мере необходимости и показать / скрыть группу / панель при необходимости.

Это одно из лучших доступных решений для окон из формы AFAIK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...