在C#中的多种形式之间切换

本文关键字:之间 多种形式 | 更新日期: 2023-09-27 18:28:35

我正在开发一个C#(紧凑框架)应用程序,我需要有3个表单。我可以从一级(主)到二级,从一级到三级。我还希望能够从中二转换到中三。Form3必须始终相同(我需要在应用程序启动时创建它,并在应用程序结束时关闭它)。

在表格1上,在"转到表格2"按钮上

form2.Show(); form2.BringToFront();

在表格1上,在"转到表格3"按钮上

form3.Show(); form3.BringToFront();

在表格2上,在"返回表格1"上

this.Hide();

在表格3上,在"返回表格1"上

this.Hide();

但是如何从中二转换到中三呢?

谢谢你的帮助!

在C#中的多种形式之间切换

我认为这里有一个多部分的解决方案。

  1. 首先,如果你的form3是一个"全局"表单,不应该被重新实例化,那么你应该把它作为一个静态的内部变量存储在某个地方,以便于引用
  2. 当form1打开form2时,应该挂接FormClosed事件
  3. 在表单2中,当用户单击按钮(或其他任何按钮)时,关闭表单2
  4. 在事件处理程序中,对于FormClosed,重新显示全局form3

感谢您的贡献!我最终构建了一个可以扩展到多种形式的灵活解决方案。

当应用程序启动时,我会创建所有必需的表单。我有一个辅助类,它有一个(全局)变量,用于保存当前活动表单(我使用了int,但它可能是一个具有表单名称的字符串)。

static class GlobalClass
{
    private static int m_currentActiveForm = 1;
    public static int currentActiveForm
    {
        get { return m_currentActiveForm; }
        set { m_currentActiveForm = value; }
    }
}

在form1上,我包含了一个计时器,它每100毫秒检查一次var currentActiveForm。当检测到变化时,将显示相应的表格。

private void timer2_Tick(object sender, EventArgs e)
    {
        if (GlobalClass.currentActiveForm != lastActiveForm)
        {
            switch (GlobalClass.currentActiveForm)
            {
                case 1:
                    form2.Hide();
                    form3.Hide();
                    this.BringToFront();
                    break;
                case 2:
                    form2.Show();
                    form2.BringToFront();
                    break;
                case 3:
                    form3.Show();
                    form3.BringToFront();
                    break;
             }
       }
}

然后,在任何表单上,要切换到新表单,我只需要为GlobalClass.currentActivitForm分配一个新值,该值在所有表单中都可见。

在表单2上,单击"转到表单3"按钮

form3.Show();

在表格3上,点击"返回表格2"按钮

this.Hide();