【问题标题】:How to bring "all forms" to foreground (WindowsMobile/C#)如何将“所有形式”置于前台(WindowsMo​​bile/C#)
【发布时间】:2010-06-28 15:31:31
【问题描述】:

(C#/WindowsMo​​bile 6)

让我们以一个具有 3 个 STATIC 表单的应用程序为例:Form1、Form2、Form3,其中 Form1 通过调用 Form2.Show() 打开 Form2,而 Form2 对 Form3 执行相同的操作。 Form2 和 Form3 有一个“退出”按钮,只是隐藏表单(不是“关闭”,只是隐藏)。

所以,我们执行以下步骤:

  • 打开应用程序;
  • 点击Form1上的“Form2”按钮进入Form2;
  • 点击Form2上的“Form3”按钮进入Form3;
  • 打开文件资源管理器,然后单击文件“重新打开”应用程序。 Form3 出现;
  • 通过单击 Form3 上的“退出”按钮 ( this.Hide() ) 隐藏 Form3。这就是问题所在:文件资源管理器出现的不是 Form2。

我不想每次隐藏表单时都调用“callingform”.Show()。这个“有效”,但文件浏览器屏幕出现在“this.Hide()”之后和“callinform.Show()”之前,我需要“控制”谁在给谁打电话。

如何解决这个问题?有没有办法让所有应用程序的表单以它们出现的顺序出现在前台?

提前致谢。

【问题讨论】:

    标签: c# windows mobile


    【解决方案1】:

    真的没有办法。您可以实现一种与第一个答案类似的方式来存储表单的方法,但是当您切换时,您需要这样做:

    "callingform".BringToFront();
    "callingform".Show();
    

    这会将您的所有表单放在 Explorer 前面。

    【讨论】:

      【解决方案2】:

      您可能需要对此进行一些调查,但是您可以尝试查看 Application.Forms[] 集合。

      也许有人可以确认或否认这一点,但我认为通常 Application.OpenForms[0] 将是主要/初始表单,后续表单出现在 Application.OpenForms[1]、Application.OpenForms[2] 等中。 ..

      因此,您可以简单地尝试在此 Forms 集合中向后导航。

      类似(或变体)的东西,

      public void BringLastOpenedFormToFront()
      {
          if(Application.OpenForms.Count > 0)
          {
             Form form = Application.OpenForms[Application.OpenForms.Count - 1];
             BringToFront(form);  // your bring to front method.
          }
      }
      

      这将允许您确保最后出现的表单被带到前面并立即对用户可见。如果您需要任何说明,请告诉我。

      链接到 MSDN: http://msdn.microsoft.com/en-us/library/system.windows.forms.application.openforms.aspx

      【讨论】:

      • CompactFramework (WindowsMo​​bile) 不支持 Application.OpenForms。无论如何谢谢。
      猜你喜欢
      • 1970-01-01
      • 2012-03-26
      • 2011-03-16
      • 1970-01-01
      • 2010-10-18
      • 2010-12-02
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多