【问题标题】:Switching between multiple forms in C#在 C# 中的多个表单之间切换
【发布时间】:2015-12-30 00:06:16
【问题描述】:

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

在表单 1 上的“转到表单 2”按钮上

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

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

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

在表格 2 上,在“返回表格 1”

this.Hide();

在表格 3 上,在“返回表格 1”

this.Hide();

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

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我很抱歉,但这个答案让我的眼睛流血了。我看不出有任何理由使用计时器。创建一个创建并拥有所有表单的 FormManager 类。给它称为 SwitchToOne、SwitchToTwo 等的方法,然后将您的表单显示和隐藏代码放在那里。
      • Compact Framework 是否支持使用继承自 ApplicationContext 的类?一个example 和另一个example
      【解决方案3】:

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

      form3.Show();
      

      在表单 3 上,单击“返回表单 2”按钮

      this.Hide();
      

      【讨论】:

        猜你喜欢
        • 2013-06-06
        • 2014-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-22
        • 2011-11-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多