我有一个winforms应用程序。我有一个用户控件有很多图标。用户可以多次在窗体上加载此控件(在选项卡式布局中)。现在我每次创建控件时都会加载图标(在应用程序中可能最多50次)。有没有办法在应用程序中缓存这些图标。如果我这样做,那会减少我正在使用的gdi句柄数量,因为这会成为一个问题。
答案 0 :(得分:2)
您可以为每个图标创建一个单例类。它创建句柄的第一个引用。后续调用使用现有句柄。
在不了解您的用户控件的情况下,我的下一个建议可能只是非常一般。但是您可以在其上绘制所有图标的单个位图图层。用户控件的其余元素将存在于此位图的上方和周围。
不幸的是,这个想法在性能方面可能会有问题。要求您重构您准备用于排列图标的代码。最后,它与具有控制形式结构的框架如何理想地起作用是非本质的。
我们使用CAM软件提供的参数形状的输入表格遇到了资源问题。太多的文本条目导致各种形式的陌生和泄密。因此,我们创建了带有边框的标签,这些边框看起来像文本条目,并且有一个文本条目(以及一个组合框条目)。当用户选中,输入或单击移动到新条目的单个文本条目,并为上一个条目设置标签。
这完全是一种非直观的设置,而不是您通常编码的方式,但这是处理资源问题的唯一方法。
根据我的经验,当您需要处理数十个或数百个条目并且必须使用不同的设计来解决问题时,GUI框架似乎存在问题。
答案 1 :(得分:0)
如果问题是“图标”的数量(不确定您的意思),您可以使用图像列表。例如,Listview控件可以引用图像列表中的图标,而不是为每个项目保留完整副本(不确定这是否适用于您的案例)。