我正在尝试做一个ImageListBox
一种可以显示大量缩略图的控件,就像 Picasa 使用的控件一样。
这是我的设计:
我有一个FlowLayoutPanel
那里居住着很多UserControl
对象,例如 4,000 个。
每个UserControl
被分配了一名代表Paint
事件。
当。。。的时候Paint
调用事件时,它会检查内存缓存中的缩略图,如果图像不在缓存中,则会从磁盘中检索它。
我有两个问题想要解决:
看来WinForms会触发一个Paint
事件即使UserControl
不在视图中。实际上只有 10 个左右的控件可见,其余的都看不到(FlowLayoutPanel.AutoScroll
被设定为true
)。因此,它会尝试检索所有图像的缩略图,这需要很长时间。
-
添加UserControl
反对FlowLayoutPanel
时间有点长,大概2-3秒。我可以忍受它,但我想知道是否有比以下更好的方法:
UserControl[] boxes = new UserControl[N];
// populate array
panel.SuspendLayout();
panel.Controls.AddRange(boxes);
panel.ResumeLayout();
要提高使用用户控件填充 FlowLayoutPanel 的速度,请在添加控件时禁用布局更新。
在循环之前立即调用SuspendLayout()然后在最后调用ResumeLayout()。确保使用 try-finally 来保证ResumeLayout()
即使发生异常也会运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)