【问题标题】:Switching forms in .NET compact framework (windows mobile 6)在 .NET 紧凑框架中切换表单(windows mobile 6)
【发布时间】:2011-02-20 18:38:00
【问题描述】:

我是 .NET 紧凑型框架的新手(对 C# 也很陌生),我在移动应用程序中切换表单时遇到了问题。在高层次上,我的应用程序使用多个表单,其中一个主“应用程序管理器”类执行表单之间的导航/切换。我的计划是按需创建表单、缓存它们并使用简单的隐藏/显示策略。

起初我想在我的主应用程序类中执行以下操作:

public void switchForm(Form newForm)
{
    currentForm.Hide(); // instance member
    newForm.Show();
    currentForm = newForm;
}

但是,这并没有按计划进行。我试图展示的新表单非常短暂地出现,然后消失在我的应用程序的主要表单后面 - 关于为什么会发生这种情况的任何想法?表单切换我读了不少,好像很多地方都提到了上面的方法。

然后我尝试了以下方法:

public void switchForm(Form newForm)
{
    currentForm.Hide(); // instance member
    currentForm = newForm;
    newForm.ShowDialog();
}

这似乎可以解决问题。但是,我想知道这是正确的方法吗?但是,使用 ShowDialog() 方法会带来另一个问题。假设我想处理旧表单,如下所示:

public void switchForm(Form newForm)
{
    Form oldForm = currentForm;
    currentForm = newForm;
    newForm.ShowDialog();
    oldForm.Dispose();
}

然后我发现 oldForm.Dispose() 代码在 newForm.ShowDialog() 完成(表单关闭)之前不会执行。因此,由于在移动到新表单时一遍又一遍地调用该方法,上述情况可能导致表单未正确处理的泄漏。另一种方法是在显示新表单之前先处理旧表单,但是,然后我的应用程序会在正在处理的旧表单和正在呈现的新表单之间临时呈现其他内容(无论表单背后的内容):/应该怎么做做这样的事情?

非常感谢。

【问题讨论】:

    标签: c# .net windows-mobile


    【解决方案1】:

    试试this:

    public void switchForm(Form newForm) 
    { 
        Form oldForm = currentForm
        newForm.Show(); 
        currentForm.Hide();
        currentForm = newForm;
        oldForm.Dispose(); 
    } 
    

    【讨论】:

      【解决方案2】:

      您在项目中创建的每个表单都是一个类。
      例如:
      我创建了一个名为 frmExample 的表单,如果您想从另一个表单调用它,您必须执行以下操作:
      - 创建您需要的类(您的表单)的新实例
      - 调用新实例(模态或非模态)

      Class frmOther<br>
          Dim frmNewForm as New frmExample()<br>
          frmNewForm.Show()<br>
      End Class
      

      【讨论】:

      • 欢迎来到 Stack Overflow!我对您的帖子进行了一些编辑以提高清晰度。感谢您的第一篇文章。
      猜你喜欢
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 2010-09-18
      • 2010-10-17
      相关资源
      最近更新 更多