Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CompactFramework 2.0-窗体与将控件加载到面板_C#_Compact Framework_Panel - Fatal编程技术网

C# CompactFramework 2.0-窗体与将控件加载到面板

C# CompactFramework 2.0-窗体与将控件加载到面板,c#,compact-framework,panel,C#,Compact Framework,Panel,我正在为WindowsMobile编写一个基于WinForms的应用程序,目标是CompactFramework2.0,并用C编写代码 我的应用程序有一个菜单,用户可以从中选择几个作业功能 我的问题是: 对于特定于作业的屏幕,我应该将UserControl加载到主窗体中的面板中,还是最好在主窗体顶部打开一个新窗体 他们似乎都满足了我的需要,我不知道这里是否有正确的答案 一种方法比另一种方法更正确吗?取决于表单/控件的复杂性。使用UserControl路径将提供更好的性能,因为您不会同时处理所有的

我正在为WindowsMobile编写一个基于WinForms的应用程序,目标是CompactFramework2.0,并用C编写代码

我的应用程序有一个菜单,用户可以从中选择几个作业功能

我的问题是:

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

他们似乎都满足了我的需要,我不知道这里是否有正确的答案


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

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

根据我的经验,根据您的硬件,加载控件的性能远远优于启动不同的表单。我们的设备摩托罗拉WT4090与32meg没有硬件加速,并绘制完整的表格似乎真的税他们。任何时候启动表单都会有多达4-6秒的延迟;然而,控件几乎是即时的。

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


为了加快速度,您可以在应用程序启动时构造所有表单。这样,当应用程序启动时,您会有一个延迟。大多数用户都可以这样做,但之后一切都会运行得更快。

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


如果你看不到任何性能方面的好处,那么这似乎只是一个偏好问题。

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

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

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

用户控制范例更为复杂——您必须自己管理加载和卸载控件,以保持较低的内存压力。复杂性还增加了成本——维护成本、支持成本和开发成本。然而,在某些场景中,UserControls也有一些明显的优势。如果您使用MVC/MVP模式和某种形式的框架来处理您的视图,那么USerControl会生成一个非常好的视图,表单将成为工作区。这是一个典型的例子,CF也是一个典型的例子


那么哪一个更好呢?这取决于您如何以及在何处使用这些元素,您的团队已经在如何进行开发,以及您如何构建您正在插入的解决方案。简言之,这不是一个正确的答案。

使用表单。这是其他应用程序的行为方式。这是用户将应用程序挤出工作空间的方式

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

因此用户知道:单击某个地方将打开一个新表单,关闭该表单将返回到最后一个表单。你应该用那种知识而不是反对它。当您使用单个表单时,用户可能会重复关闭它,而实际上他希望返回到最后一个表单


从性能的角度来看,我发现表单打开的速度不够快,我不知道为什么会这样。形式源于控件,因此是控件本身。它只是一个容器控件。它的开销真的很小,除非它包含的孩子们在构造时做了很多工作,而且这不是形式上的错误。@ctacke我并不认为我们正在做一些非常复杂的事情
rong,但我确实尝试过使用表单与只使用几个简单文本框的控件进行比较;类似的结果。特别是在我们的设备上,清除previoius表单,然后显示新的完整表单似乎是一个问题。我猜速度的提高是因为该设备只需绘制一个小得多的矩形,而不需要处理之前的矩形。不过纯粹是猜测。同样的行为也可以通过用户控件实现。您习惯于在表单中编程,所以它看起来像表单行为,但这并不意味着它实际上就是这样实现的。@ctake:谢谢您指出这一点。我据此编辑了这篇文章。