2009-04-30 84 views
1

所以我认为自己是一个.Net和ASP.NET专业版,但是我对Windows Mobile有点新(我的目标是.NET 3.5 CF和Windows Mobile 6)。Windows Mobile - 只保留一个窗体。最好的设计问题

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

每个表单都从主窗体中嵌入,以便它们每个都具有相同的菜单。

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

回答

1

我保留一些我称之为应用程序中心的东西,尽管如此。

因此,每个菜单点击都会调用应用程序中心,每个表单都会引用它。

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

这是没有太多的代码来写,并表现良好。

或...性能明智,保持应用程序中心的想法,并保持对话框打开。它的表现会更好,而不是一直重新加载表单。

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

1

而不是有多个窗体(继承形式mainForm),你可以把表的东西放在UserControls上,并且对其创建/销毁/可见性的控制更容易。 使用接口或BaseUserControl来实现通用功能。

+0

这也是我的首选模式。 :) – Quibblesome 2009-05-01 16:10:01

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,则调度任何种类的填充逻辑。