C#中的多个窗体之间的切换

Switching between multiple forms in C#

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

在 form1 上,在 "Go to form 2" 按钮上

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

在 form1 上,在 "Go to form 3" 按钮上

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

在 form2 上,在 "Back to form 1"

this.Hide();

在 form3 上,在 "Back to form 1"

this.Hide();

但是如何从 form2 切换到 form3 呢?

感谢您的帮助!

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

  1. 首先,如果您的 form3 是 "global" 表单而不应该是 re-instantiated,那么您应该将其作为静态内部变量存储在某处以便于参考。
  2. 当 form1 打开 form2 时,您应该挂钩 FormClosed 事件。
  3. 在 form2 中,当用户单击按钮(或其他)时关闭 form2。
  4. 在您的事件处理程序中,对于 FormClosed,重新显示全局 form3。

在 form2 上,单击 "Go to form 3" 按钮

form3.Show();

在 form3 上,单击 "Back to form 2" 按钮

this.Hide();

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

应用程序启动时,我会创建所有必需的表单。我有一个辅助 class 和一个(全局)变量,它保存当前的活动表单(我使用了一个 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.currentActiveForm 分配一个新值,该值在所有表单中都可见。