我正在尝试制作ImageListBox
一种可以显示大量缩略图的控件,例如 Picasa 使用的控件。
这是我的设计:
我有一个FlowLayoutPanel
填充了很多对象的UserControl
对象,例如 4,000 个。每个人都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();