Windows Mobile-仅保持一个表单打开。最好的设计问题

时间:2009-04-30 21:57:52

标签: c# .net windows-mobile compact-framework

所以我认为自己是.Net和ASP.NET专业版,但我对Windows Mobile有点新手(我的目标是.net 3.5 CF和Windows Mobile 6)。

我正在创建一个包含3-4个表的数据驱动应用程序。我为每个表创建了一个表单,允许用户搜索表格。

每个表单都包含在Main表单中,以便它们各自具有相同的Menu。

我的问题是如何确保只打开一个窗口。我想允许用户转到菜单并选择一个将打开新表单的表。我不想要的是让用户打开说出每个表单,然后当他们完成时必须关闭3或4个窗口。这可能吗?如果是这样我该怎么办?另一方面,有更好的方法可以做到这一点。我不希望我的所有逻辑都在一个表格上。所以我不只是想隐藏和显示和面板。

3 个答案:

答案 0 :(得分:1)

我保留了一些我称之为应用程序中心的东西,但事情一切顺利。

因此,每次单击菜单都会调用applciation hub,每个表单都会引用它。

然后,在切换表单时,应用程序中心需要跟踪当前表单,关闭它,然后加载请求的表单。

编写的代码不多,而且表现良好。

或者......性能方面,保持应用程序中心的想法,并保持对话框打开。它会以这种方式表现得更好,而不是必须一直重新加载表单。

然后在关闭时,应用程序中心可以检查哪些表单是打开的(它应该有对每个正在运行的表单的引用)并为用户关闭它们。

答案 1 :(得分:1)

您可以将表格内容放在UserControls上,并且可以更轻松地完全控制其创建/销毁/可见性,而不是拥有多个表单(继承形式为mainForm)。 使用Interface或BaseUserControl实现常用功能。

答案 2 :(得分:1)

当我重新设计.NET CF应用程序时,这篇文章虽然不是您要求的,但却非常有用:Creating a Multiple Form Application Framework for the .NET Compact Framework

我的应用程序需要两个世界 - 我希望打开一个表单,但有时也希望在第一个表单之上堆叠辅助表单(例如,如果它们转到Prefs页面或其他类型的形式,他们应该只是片刻之后才会解雇它。)

(此后的伪编码)
我创建了一个ViewManager并将其实现为单例。当应用程序首次启动时,我调用ViewManager.GotoForm(frm)。这将当前形式设置为我需要的任何形式。 然后我立即调用ViewManager.CurrentForm.ShowDialog() - 我确定有更好的方法,但我发现我必须在某一点调用ShowDialog()才能显示一个表单。

对ViewManager的后续调用可以采用.ReplaceForm或.StackForm形式。差异应该相当直观 您还可以在这样的视图管理器中执行的操作是未显示的缓存表单,但可能会再次显示并且设置成本高昂(例如,在数据驱动的应用程序中,您可能需要查询数据库以确定要在表单上显示的字段或表,这在运行时不会更改)。

这里的诀窍是你永远不会在你的应用程序中的任何地方调用.Show()或.ShowDialog() - 你通过视图管理器路由所有表单导航,该管理器处理加载表单的下一个实例,处理旧表单(如果没有被缓存)如果你想在加载之前将新数据传递给表单的UI,则调度任何类型的填充逻辑。