在.NET Compact Framework(Windows Mobile 6)中切换表单

4

我是.NET Compact Framework的新手(也基本上是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() 完成(表单关闭)才执行。因此,上面的操作可能会导致泄漏,因为在移动到新表单时该方法被重复调用,而表单没有正确处理。另一种方法是先处理旧表单,然后再显示新表单,但这样会导致应用程序在旧表单被处理和新表单被呈现之间临时渲染其他内容(任何位于表单后面的东西):/ 如何处理这样的情况?

非常感谢。

2个回答

2

试试这个

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

1
每个在项目中创建的表单都是一个类。
例如: 我创建了一个称为frmExample的表单,如果你想从另一个表单中调用它,你需要执行以下操作: -创建所需类(即你的表单)的新实例 -调用新实例(模态或非模态)。
Class frmOther<br>
    Dim frmNewForm as New frmExample()<br>
    frmNewForm.Show()<br>
End Class

欢迎来到Stack Overflow!我对您的帖子进行了一些编辑,以提高其清晰度。感谢您的第一篇帖子。 - M. K. Hunter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接