ListView中音乐项缩略图无法显示问题求助
ListView无法显示音乐缩略图的问题排查与修复
问题核心
要在ListView中展示音乐项的缩略图和标题,其中一段代码无法实现预期效果,但逻辑相似的另一段代码正常运行。已确认musicitemstoadd集合及图片本身无问题(通过PictureBox验证图片可正常显示),对比两段代码后发现,无效代码未将创建的ImageList绑定到ListView的SmallImageList属性。
无效代码
form1.playlist_music_list.Items.Clear(); form1.playlist_music_list.Columns.Add(" ", 400); form1.playlist_music_list.View = View.Details; ImageList thumbnailImageList = new ImageList(); thumbnailImageList.ImageSize = new Size(180, 101); foreach (var musicItem in musicitemstoadd) { thumbnailImageList.Images.Add(musicItem.Image); ListViewItem item = new ListViewItem(musicItem.Title); item.ImageIndex = thumbnailImageList.Images.Count-1; item.Tag = musicItem.VideoId; form1.playlist_music_list.Items.Add(item); }
有效代码
internal async void internal_playlist(List<Playlist_Music_Items> playlist, String sel_videoid) { form1.Inplay_playlist.Clear(); form1.Inplay_playlist.Columns.Add(" ",400); form1.Inplay_playlist.View = View.Details; ImageList thumbnailImageList = new ImageList(); thumbnailImageList.ImageSize = new Size(180, 101); foreach (var musicItem in playlist) { thumbnailImageList.Images.Add(musicItem.Image); ListViewItem item = new ListViewItem(musicItem.Title); item.ImageIndex = thumbnailImageList.Images.Count - 1; form1.Inplay_playlist.Items.Add(item); } form1.Inplay_playlist.SmallImageList = thumbnailImageList; }
问题原因与修复方法
两段代码的核心差异在于有效代码最后将创建的thumbnailImageList赋值给了ListView的SmallImageList属性,而无效代码缺少这一步。
ListView要显示项的图片,必须明确指定图片来源的ImageList:
- 在
Details视图下,项的图标由SmallImageList提供 - 只有将ImageList绑定到对应的ListView属性后,ListView才能根据
ImageIndex找到对应的图片
修复无效代码只需在循环结束后添加绑定语句:
// 循环结束后添加这一行 form1.playlist_music_list.SmallImageList = thumbnailImageList;
内容的提问来源于stack exchange,提问作者Base Night
相关产品推荐
相关产品推荐

