在C#中切换多个表单

时间:2015-12-30 00:06:17

标签: c# forms windows-mobile compact-framework

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

在form1上,“转到表单2”按钮

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

在form1上,在“转到表单3”按钮

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

在form2上,“返回表单1”

this.Hide();

在form3上,“返回表单1”

this.Hide();

但是如何从form2切换到form3?

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

static class GlobalClass
{
    private static int m_currentActiveForm = 1;

    public static int currentActiveForm
    {
        get { return m_currentActiveForm; }
        set { m_currentActiveForm = value; }
    }
}

在form1上,我已经包含了一个定时器,它每隔100ms检查一次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分配一个新值,该值在所有表单中都可见。

答案 2 :(得分:-1)

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

form3.Show();

在form3上,单击"返回表单2"按钮

this.Hide();