You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6中WinForms ListView无法显示图片问题求助

.NET 6中ListView Detail视图无法显示图片的问题

使用ListView在Detail视图显示图片的示例代码,在.NET Framework 4.7.2环境下可正常运行,但切换到.NET 6.0 (LTS)环境后,图片无法显示。确认是.NET版本差异导致的问题,询问是否遗漏了必要配置。

相关代码

public partial class Form1 : Form
{
    List<string> _list = new();
    ImageList serviceLogoList = new ImageList
    {
        ImageSize = new Size(32, 32),
        ColorDepth = ColorDepth.Depth32Bit
    };


    public Form1()
    {
        InitializeComponent();
        initializeListView();


        DirectoryInfo dir = new DirectoryInfo(@"resources"); // 替换为你的图片文件夹路径
        foreach (FileInfo file in dir.GetFiles())
        {
            try
            {
                this.serviceLogoList.Images.Add(Image.FromFile(file.FullName));
            }
            catch
            {
                // 记录加载错误
            }
        }

        foreach (var str in _list)
        {
            ListViewItem item = new ListViewItem();
            item.Text = str;
            item.SubItems.Add("OK");
            item.ImageIndex = 0; // 尝试过1、2等索引仍无效
            listView1.Items.Add(item);
        }
    }
    private void initializeListView()
    {
        _list.Add("Test1");
        _list.Add("Test2");
        _list.Add("Test3");

        listView1.View = View.Details;
        // listView1.LargeImageList = serviceLogoList;
        listView1.SmallImageList = serviceLogoList;
        listView1.Columns.Add("Name", 100);
        listView1.Columns.Add("Status", 100);
    }
}

环境差异说明

项目仅需在窗体中添加名为listView1的ListView控件,其余逻辑均在代码后置文件中实现。

问题原因及解决方案

在.NET 6及以上版本的Windows Forms中,ImageList关联到ListView后再添加图片,控件不会自动触发图片更新;而.NET Framework中存在隐式的同步机制,因此可以正常工作。

修正方法:调整代码执行顺序,先完成ImageList的图片加载,再将其赋值给ListView的SmallImageList:

修正后的代码

public partial class Form1 : Form
{
    List<string> _list = new();
    ImageList serviceLogoList = new ImageList
    {
        ImageSize = new Size(32, 32),
        ColorDepth = ColorDepth.Depth32Bit
    };


    public Form1()
    {
        InitializeComponent();
        initializeListView();

        // 1. 先加载所有图片到ImageList
        DirectoryInfo dir = new DirectoryInfo(@"resources");
        foreach (FileInfo file in dir.GetFiles())
        {
            try
            {
                this.serviceLogoList.Images.Add(Image.FromFile(file.FullName));
            }
            catch
            {
                // 记录加载错误
            }
        }

        // 2. 再将ImageList赋值给ListView
        listView1.SmallImageList = serviceLogoList;

        // 3. 添加ListView项
        foreach (var str in _list)
        {
            ListViewItem item = new ListViewItem();
            item.Text = str;
            item.SubItems.Add("OK");
            item.ImageIndex = 0;
            listView1.Items.Add(item);
        }
    }
    private void initializeListView()
    {
        _list.Add("Test1");
        _list.Add("Test2");
        _list.Add("Test3");

        listView1.View = View.Details;
        // 移除此处的SmallImageList赋值
        listView1.Columns.Add("Name", 100);
        listView1.Columns.Add("Status", 100);
    }
}

此外,还需确保:

  • resources文件夹路径正确,且包含可正常加载的图片文件
  • 图片索引ImageIndex对应存在的图片(避免索引越界)

内容的提问来源于stack exchange,提问作者jeranio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 13:40:24