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