【发布时间】:2020-05-03 12:34:56
【问题描述】:
我想显示 MP3 库的每张专辑的封面,有点像 Itunes 所做的(在稍后阶段,我想单击这些封面中的任何一个以显示歌曲列表)。
我有一个带有panel1 面板的表单,这是我正在使用的循环:
int i = 0;
int perCol = 4;
int disBetWeen = 15;
int width = 250;
int height = 250;
foreach(var alb in mp2)
{
myPicBox.Add(new PictureBox());
myPicBox[i].SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
myPicBox[i].Location = new System.Drawing.Point(disBetWeen + (disBetWeen * (i % perCol) +(width * (i % perCol))),
disBetWeen + (disBetWeen * (i / perCol))+ (height * (i / perCol)));
myPicBox[i].Name = "pictureBox" + i;
myPicBox[i].Size = new System.Drawing.Size(width, height);
myPicBox[i].ImageLocation = @"C:/Users/Utilisateur/Music/label.jpg";
panel1.Controls.Add(myPicBox[i]);
i++;
}
为方便起见,我对每个图片框使用相同的图片,但最终我会使用嵌入在每个 mp3 文件中的封面。
图书馆的摘要(大约 50 个)可以正常工作,但我有数千张专辑。我尝试过,正如预期的那样,加载需要很长时间,之后我无法真正滚动。
有没有办法只加载显示的内容?然后是如何评估滚动条显示的内容。
谢谢
【问题讨论】:
-
由于所有图像都是 250x250,您可以将它们加载到 ImageList 中并在 ListView 中显示它们。比创建大量控件要好得多..
-
var folders = getFolders(500); foreach (string fn in folders) { ilFolders.Images.Add(fn, Image.FromFile(fn)); } int i = 0; foreach (string k in ilFolders.Images.Keys) { var lvi = new ListViewItem(k, i); lv_folders.Items.Add(lvi); i++; }- 例如加载10 秒内覆盖 500 个封面。滚动没有任何问题。加载更多图像需要某种缓存/分页方案和/后台加载任务。 -
分页演示见here
-
感谢 TaW,我尝试了您的解决方案并且它有效,但我认为下面的答案为表单的组织提供了更大的灵活性。还是谢谢!
标签: c#