当应用程序启动时,我不会去实例化45个窗体的路线。这会严重延长启动时间,并可能(如果不是很可能)耗尽您的内存资源,所有这些都会提供您的用户甚至不需要的功能。
在我的WinMo应用程序中,每个表单都设计用于处理相对较小的数据子集,因此启动时间仅限于数据库调用并将数据加载到表单的控件中。通常,实例化这些表单中的一个并显示它所需的时间不会超过一秒或两秒。
如果您的表单花费的时间比此更长,那么您的数据检索或数据加载到表单控件的方式可能存在问题(例如,您可能有一个自定义的gridview控件,可以完全呈现所有的表单300行,即使一次只能看到12行)。如果您的数据太大以至于合法需要很长时间才能检索,那么数据远远多于用户实际上可以进行交互的数据。
我假设你提及“5部分”以获取用户需要去的地方意味着他们可能(最多)“向下钻取”5个层次。如果您通过让每个表单实例化并使用ShowDialog
显示下一个表单来实现这一点,那么在任何时候最多只能存在5-6个表单,这对于.Net CF应用程序来说应该不会有任何问题(我这样做每时每刻)。通过这种方式,您无需执行任何特别的操作,即可随时随地打开表单,并在表单关闭时自动返回到调用表单,从而跟踪应显示哪种表单。
有,你必须处理一些z顺序/任务管理器的怪事,但它不是特别复杂。在子窗体上调用ShowDialog
之前,将父窗体的Text
属性设置为空字符串,然后在ShowDialog
返回后将其设置回窗体的原始标题。这并非严格必要,但在Windows Mobile(至少到版本6)中,即使所有打开的.Net窗体(具有非空白Text属性)都显示在“正在运行的程序”列表中,即使它们全部相同应用。我通常喜欢我的多表单应用程序看起来只是一个程序,所以我通常将每种表单的Text
设置为应用程序的名称)。
我也尝试过一种单一形式的应用程序,它将每个UI作为UserControl而不是Form来实现,然后创建并堆叠控件,就像创建和打开表单一样。这工作,但它是一个黑客,我不推荐它。表单有Load事件,而UserControls没有,这是主要问题。
啊,但是如果你在这些UserControls周围使用框架,你可以创建你自己的Load事件。 – ctacke 2010-04-30 21:54:36
Bah,我甚至不再使用* controls * - 我只是在屏幕上使用BitBlt。 :) – MusiGenesis 2010-04-30 21:56:48
哦,我有一个窗体与47 UserControls的意见。但有趣的是我有一个自定义控件,用于在每个视图上显示*每个* UI元素。基本上,为了获得所需的alphablending,我需要做一个“瑞士军刀”控制,将其与定制绘画混合并放弃工具箱中的所有其他部分。啊CF发展的乐趣。 – ctacke 2010-04-30 22:03:01