我正在尝试制作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();