如何创建一个替换当前表单的窗体?

时间:2018-06-03 03:32:17

标签: c# winforms visual-studio

我正在使用Windows Forms制作游戏,我觉得制作不同屏幕(主菜单,设置等等)的最简单方法是为每个屏幕使用单独的表单。我已经查找了许多不同的方法来做到这一点。很多人都在谈论使用form2.Show(); this.Hide();,但这会创建一个新的弹出窗口。 人们还建议使用this.IsMdiContainer = true;在当前窗口内创建一个新窗口,但这也不是我想要的功能。

编辑:另一个问题,multiple-guis-one-window,稍微解释了这可以使用UserControls来实现,但没有详细说明任何示例,或者我应该做什么。

我想完全用新表单替换当前表单的功能。

有没有办法实现这个目标?如果没有,是否有一个很好的替代方案?

2 个答案:

答案 0 :(得分:2)

据我了解,您希望保留相同的表单并更改该表单中的数据(不会产生关闭表单并再次重新打开的效果)。

问题是Windows窗体不直接支持这样的东西(至少不是以最佳方式),我会使用另一个UI框架。但是,如果您想坚持使用Windows窗体,可以使用 GroupBox 面板工具(可从Visual Studio中的Windows窗体设计工具获得)。在这里,您可以根据需要对元素进行分组,并根据需要显示/隐藏组/面板。

这是Windows AFAIK的最佳解决方案之一。

答案 1 :(得分:2)

你想在主表单中打开子表单然后你应该尝试这个我创建它没有任何用户控件。

我管理了一个父表单和两个子表单。子表格应在父表格内开放。

  • frmMain(父母表格)

enter image description here

  • frmMain 属性设置为以下

    WindowState = System.Windows.Forms.FormWindowState.Maximized

我在frmMain窗口中占用了3个面板。

  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;属性
    • 根据需要设置此面板的高度。
  4. 我在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&amp; frmChildForm2(ChildForm)

    • 将表单属性设置为以下

      FormBorderStyle = System.Windows.Forms.FormBorderStyle.None

    现在,当您单击Child Form 1 Menu时,显示以下输出: enter image description here

    当您单击Child Form 2 Menu时,显示以下输出: enter image description here

    我认为这对你有帮助。