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

Windows Forms ListView动态添加ImageList图片显示为黑方块问题求助

故障根因及修复方案

核心问题点

  • ImageList属性配置顺序错误。WinForm中ImageList一旦绑定到ListView等控件后,再修改ImageSize、ColorDepth属性会导致内部图像句柄异常,最终渲染为黑色方块。原代码先执行了LV.SmallImageList = imgs,后设置imgs.ImageSize,直接触发了该问题。
  • ListViewItem未关联ImageList索引。往ImageList中添加图片后,创建ListViewItem时未指定ImageIndex属性,ListView无法匹配对应位置的图片进行渲染。

修复后的代码

public ListView List_Of_Albums(ListView LV)
{
    LV.Clear();
    LV.Columns.Add("Album Name", 233);
    LV.View = View.Details;
    
    // 先完全配置ImageList所有属性,再加图、再绑定到ListView
    ImageList imgs = new ImageList();
    // 显式设置色深,兼容透明/半透明图片
    imgs.ColorDepth = ColorDepth.Depth32Bit;
    imgs.ImageSize = new Size(108, 93);

    // 所有属性配置完成后再绑定到ListView
    LV.SmallImageList = imgs;
    LV.BringToFront();

    try
    {
        ConexionDB();
        SqlCommand cmd = new SqlCommand("spSelect_Albums", cnx);
        cmd.Connection = cnx;
        cmd.CommandType = CommandType.StoredProcedure;
        using (SqlDataReader dr = cmd.ExecuteReader())
        {
            while (dr.Read())
            {
                string[] row =
                {
                    dr.GetValue(2).ToString(),
                    dr.GetValue(0).ToString(),
                    dr.GetValue(1).ToString(),
                    dr.GetValue(3).ToString(),
                    dr.GetValue(4).ToString(),
                    dr.GetValue(5).ToString(),
                    dr.GetValue(6).ToString(),
                    dr.GetValue(7).ToString(),
                    dr.GetValue(8).ToString(),
                    dr.GetValue(9).ToString()
                };
                try
                {
                    imgs.Images.Add(Image.FromFile(dr.GetValue(4).ToString()));
                }
                catch (Exception)
                {
                    imgs.Images.Add(Properties.Resources.No_Art);
                }
                // 指定当前项对应ImageList的索引,刚添加的图片索引为总数-1
                var LVItem = new ListViewItem(row, imgs.Images.Count - 1);
                LV.Items.Add(LVItem);
            }
        }
        cnx.Close();
        // 列自适应放到数据填充完成后执行
        LV.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
        return LV;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message.ToString(), "Database execution error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return LV;
    }
}

额外排查点

如果修改后仍有异常,可按以下顺序验证:

  • 确认读取的图片格式为WinForm GDI+支持的格式(jpg、png、bmp等,不支持webp、heic等非常规格式)
  • 确认Properties.Resources.No_Art资源的尺寸和色深与ImageList配置匹配,避免单张异常图片影响整体渲染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:15:03