0

我有一个winforms 应用程序。我有一个带有很多图标的用户控件。用户可以在表单上多次加载此控件(在选项卡式布局中)。现在我每次创建控件时都在加载图标(在应用程序中可能高达 50 次)。有没有办法在应用程序中缓存这些图标。如果我这样做,会减少我正在使用的 gdi 句柄的数量,因为这已成为一个问题。

4

2 回答 2

2

您可以为每个图标创建一个单例类。它创建句柄的第一个引用。后续调用使用现有句柄。

在不了解您的用户控制的更多信息的情况下,我的下一个建议只能是非常笼统的。但是你可以有一个单一的位图层,你可以在上面绘制所有的图标。用户控件的其余元素将存在于该位图上方和周围。

不幸的是,这个想法在性能方面可能存在问题。要求您重构所有准备用于排列图标的代码。最后,从具有控制形式结构的框架如何理想地工作来看,它是非制度性的。

我们在使用 CAM 软件附带的参数形状的输入表单时遇到了资源问题。太多的文本条目导致了各种形式的陌生和泄漏。因此,我们改为创建带有边框的标签,看起来像文本条目,并且有一个文本条目(以及一个组合框条目)。当用户选择、输入或单击单个文本条目时,会移动到新条目,并且为前一个条目设置标签。

这完全是一个不直观的设置,而不是您通常编码的方式,但它是处理我们的资源问题的唯一方法。

根据我的经验,当您必须处理数十或数百个条目并且您必须使用不同的设计来解决问题时,GUI 框架似乎会出现问题。

于 2008-11-28T03:11:24.173 回答
0

如果问题是“图标”的数量(不确定您的意思),您可以使用 Image-Lists。例如,Listview 控件可以引用图像列表中的图标,而不是为每个项目保留完整副本(但不确定这是否适用于您的情况)。

于 2012-05-08T16:14:44.143 回答