我正在尝试进行ImageListBox
一种显示大量缩略图的控件,比如Picasa使用的缩略图.
这是我的设计:
我有一个FlowLayoutPanel
填充了很多UserControl
对象,例如4000.每个人都UserControl
被分配了一个Paint
事件代表.当Paint
事件被调用时,它会检查内存缓存缩略图,如果图像不在缓存中,它从磁盘检索它.
我有两个问题需要解决:
Paint
即使UserControl
不在视图中,WinForms似乎也会触发事件.实际上只有10个左右的控件FlowLayoutPanel.AutoScroll
可供查看,其余的不是(设置为true
).因此,它会尝试检索所有图像的缩略图,这需要很长时间.
添加UserControl
对象FlowLayoutPanel
需要花费相当长的时间,大约2-3秒.我可以忍受它,但我想知道是否有更好的方法来做到这一点:
UserControl[] boxes = new UserControl[N]; // populate array panel.SuspendLayout(); panel.Controls.AddRange(boxes); panel.ResumeLayout();
Bevan.. 5
若要提高使用用户控件填充FlowLayoutPanel的速度,请在添加控件时禁用布局更新.
在您的循环之前,呼叫SuspendLayout()
然后在结束呼叫ResumeLayout()
.ResumeLayout()
即使发生异常,也要确保使用try-finally来保证运行.
若要提高使用用户控件填充FlowLayoutPanel的速度,请在添加控件时禁用布局更新.
在您的循环之前,呼叫SuspendLayout()
然后在结束呼叫ResumeLayout()
.ResumeLayout()
即使发生异常,也要确保使用try-finally来保证运行.