3

我正在为 Windows Mobile 编写基于 WinForms 的应用程序,以 CompactFramework 2.0 为目标并使用 C# 进行编码。

我的应用程序有一个菜单,用户可以从中选择严重的工作职能。

我的问题是这样的:

对于特定于工作的屏幕,我应该将 UserControl 加载到主窗体的面板中,还是在主窗体顶部打开一个新窗体更好?

它们似乎都满足了我的需求,我不知道这里是否有“正确”的答案。

一种方法比另一种更正确吗?

4

6 回答 6

2

根据我的经验,根据您的硬件,加载控件远远优于启动不同的表单。我们的设备(Motorola WT4090 with 32meg)没有硬件加速,绘制完整的表格似乎真的很累。每次启动表单都会有多达 4-6 秒的延迟;然而,控制几乎是瞬时的。

于 2009-04-21T15:04:10.300 回答
2

表单是控件(只看继承链),表单本身并没有太多的开销。它创建了一个本地窗口,但仅此而已。

推动您做出决定的是如何在解决方案中使用和显示 UI 元素。表单有利于许多 UI 架构,并且它们是大多数开发人员所熟悉的。设计师很好地支持它们,创建、显示、隐藏和关闭表单是一个有据可查的、经常使用的范例,效果很好。是的,每当创建表单时,您都会受到负载惩罚,因为它会创建所有包含的控件,但即使它是 UserControl,您也要付出代价。在任何一种情况下都必须创建子控件。

有人可能会争辩说,表单要求您每次都重新创建它们,但事实并非如此。如果您使用 ShowDialog 或 Hide 而不是 Close,您可以重复使用您的表单并支付一次费用。这里的优点是表单将您的控件保存在集合中并为您管理所有这些,因此您无需担心 GC 并记住您活着的根。

UserControl 范式更复杂 - 您必须自己管理加载和卸载控件以保持较低的内存压力。复杂性也增加了成本——维护成本、支持成本和可能的开发成本。然而,在某些情况下,UserControls 也有一些明显的优势。如果您使用 MVC/MVP 模式和某种形式的框架来处理您的视图,则 USerControl 可以通过表单成为工作区来制作非常好的视图(桌面的 SCSF就是一个典型的例子,OpenNETCF.IoC也是如此CF框架)。

那么哪个“更好”?这取决于您使用这些元素的方式和位置、您的团队已经如何进行开发以及您如何构建您正在插入的解决方案。简而言之,没有一个正确的答案。

于 2009-04-21T17:57:41.553 回答
1

也许最好的答案是创建一系列用户控件并尝试将它们加载到主窗体上。然后尝试创建一系列仅具有用户控件的表单以查看是否可以提高性能应该是一件相当容易的事情。

如果无论哪种方式您都看不到任何性能优势,那么这似乎只是一个偏好问题。

于 2009-04-21T17:26:33.140 回答
1

使用表格。这是其他应用程序的行为方式。这是用户使您的应用程序工作的方式。

查看预装的“联系人”应用程序:在启动时,您会获得一个联系人列表。选择联系人后,将在当前窗口顶部打开一个新表单。它显示了所有联系人的详细信息。从菜单中选择“编辑”将打开另一个表单,允许您编辑联系人。“任务”应用程序的行为方式相同。

所以用户知道:点击某个地方会打开一个新表单,关闭该表单会让我回到上一个表单。你应该与那个知识一起工作而不是反对它。当您使用单个表单时,用户可能会在他实际上想要返回上一个表单时反复关闭它。

从性能的角度来看,我发现我的 WM 5 和 WM 6 设备上的表单打开速度足够快(<1 秒)。

虽然使用 UserControls 可以实现类似表单的行为,但当您需要类似表单的行为时,使用表单似乎更加严格。

所以我的底线是:使用表格!

PS:CodeProject上有一篇很好的文章:How to create MDI Application in Compact framework

于 2009-04-21T18:37:02.723 回答
0

取决于表单/控件的复杂性。走 UserControl 路线将提供更好的性能,因为您不会同时处理所有表单创建功能。

于 2009-04-21T15:03:39.583 回答
0

我的建议是为每个不同的逻辑操作创建一个新的 Windows 窗体。如果您需要一个逻辑上独立的窗体,那么最好为它提供一个单独的 Windows 窗体。

为了加快速度,您可以在应用程序启动时构建所有表单。这样你的应用程序启动时会有延迟(大多数用户会对此感到满意),但之后一切都会运行得更快。

于 2009-04-21T15:12:08.440 回答