c# - 在 .NET compact framework (windows mobile 6) 中切换表单

标签 c# .net windows-mobile

我是 .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() 完成(表单关闭)之前不会执行。因此,当移动到新表单时一遍又一遍地调用该方法时,上述情况可能会导致表单未正确放置而导致泄漏。另一种方法是在显示新表单之前先处理旧表单,但是,然后我的应用程序会在处理旧表单和呈现新表单之间临时呈现其他内容(无论表单背后是什么):/应该怎么做做这样的事情?

非常感谢。

最佳答案

尝试 this :

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

关于c# - 在 .NET compact framework (windows mobile 6) 中切换表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2855426/

相关文章:

c# - 在 C# 中声明具有空集的属性

c# - CSLA 可编辑网格

.net - 如何在 Datagridview 中选择并滚动到新行?

c# - 从 C header 自动创建 C# 包装器?

c# - 确定 GDI 句柄和 USER 对象的数量

c# - Windows Mobile 上的 GPU 访问

c# - 在构建之前注入(inject) C# 代码

c# - 出现在 VS.NET IDE 上的这个符号是什么?

c# - SmartDevice 应用程序的自定义消息过滤器

c# - 处理 Session 过期异常