如何避免表单上的大量用户控件

时间:2011-06-15 14:06:41

标签: c# winforms performance user-controls

我正在创建一个表示其他自定义控件列表的用户控件(它们非常简单:包括标签,复选框,图标和按钮)。当我将它放在一个表单上时,需要很长时间才能加载所有列表项(列表中有100到150个项)。显示大量自定义控件列表的替代方法有哪些?

我尝试使用SuspendLayout和ResumeLayout,但它没有多大帮助,使用它们会缩短时间,但仍然太长。

由于各种原因,我无法实施一些想法:

  • 不知何故只能处理视图中的项目(如何忽略其他项目?)
  • 实现网格控制行为 - 仅在编辑模式下创建自定义控件,但很难绘制其他控件

感谢任何建议

修改

有一些使用DataGridView的建议。这是一个好主意,但问题是自定义控件可以改变它的大小并在下面显示其他信息(它的行为类似于扩展器)。使用DataGridView

并不容易

4 个答案:

答案 0 :(得分:2)

如果您与WinForms绑定,那么我强烈建议您使用DataGridView。我刚才遇到了同样的问题,发现DataGridView足够可扩展,可以列出各种控件(TextBoxes,CheckBoxes,甚至是DateTimePickers等)。过渡到这个控件极大地加快了我的UI,并且更稳定,更容易维护。

如果你需要更多高级设施,比如你提到的Expander属性,那么我认为你应该研究一下WPF。使用WPF,您可以非常灵活地按照自己的方式完全设计UI控件,并且性能仍然非常好。

如果这些都不适合您,那么如何重新设计用户界面?如前所述,没有办法减轻大量控件的性能损失。那么如何使用过滤器或搜索工具一次显示一行或仅显示几行,以允许用户找到他们想要的行。或者,显示所有行,但每行仅使用最少的控件,并让用户双击该行以显示一个对话框窗口,以显示有关该行的更多详细信息?不管怎样,你必须减少最初显示的控件数量。这些只是一些想法。

答案 1 :(得分:1)

不幸的是,没有办法无所事事。生活中的事情不是免费的。如果您的表单上有不合理数量的控件,则必须支付加载它们所需的时间。唯一的选择是使用更少的控件。

无论您是通过剥离一些已经完成的内容,还是通过自定义绘制内置版本的较轻版本来实现这一目标,都取决于您。但我高度建议您坚持使用本机控件,然后放弃现在使用的一些控件。

除了明显的性能问题之外,您所描述的方案仍然会产生用户溢出错误,这是一个没有调试器可以修复的错误。

答案 2 :(得分:1)

我同意@Cody,但是,如果“剥离你所拥有的一些”不是一种选择......让我更进一步......

你提到你有一个清单。

我会从iOS手册中提示,并且只有在屏幕上显示列表所需的激活控件数。

例如;如果列表在屏幕上有30个项目的空间,则可以重复使用相同的30个控件,因为用户在列表中滚动/页面。

这提出了另一点 - 有时稍微修改导航是一个不错的选择。如果你现在有一个巨大的列表,可能是一个“分页”功能,你只需要考虑每个“页面”显示x个项目。

无论如何,当你在应用程序中达到这一点,并且你有实际的加载速度/内存使用性能要求时,是时候破解关于性能调优的旧书,并实现重用,缓存等经过验证的模式等等。它通常并不总是很漂亮,它会使你的解决方案变得更加复杂,但是你需要做你需要做的事情来使它正常工作。

答案 3 :(得分:0)

使用DataGridView并自定义列?