在窗口形式的ListView中的图像问题(c#)

本文关键字:问题 图像 ListView 窗口 | 更新日期: 2023-09-27 18:07:33

我正在创建一个窗口表单UI,包括文件浏览器(一个ComboBox和一个ListView,每个项目的第一列都有图像),我使用的ListView视图是Detail,我已经将图像添加到smalllimagelist,已经测试图像不为空,并为每个项目设置图像索引,但图像仍然没有显示。

这是我的代码

        main_fileView.View = View.Details;
        string[] files;
        if (main_dirComboBox.Text != "")
        {
            string parent = main_dirComboBox.Text;
            if (System.IO.Directory.Exists(parent))
            {
                files = System.IO.Directory.GetFiles(parent);
                if (files != null)
                {
                    main_fileView.Items.Clear();
                    ImageList img_list = new ImageList();
                    int n = 0;

                    ImageList small_img_list = new ImageList();
                    ImageList large_img_list = new ImageList();
                    for (int i = 0; i < files.Length; i++)
                    {
                        string file_name = files[i].Substring(files[i].LastIndexOf('''') + 1, files[i].Length - (files[i].LastIndexOf('''') + 1));
                        string file_type = file_name.Substring(file_name.LastIndexOf('.'), file_name.Length - file_name.LastIndexOf('.'));
                        //get icon image from system
                        Icon smallicon = Icons.IconFromExtension(file_type, Icons.SystemIconSize.Small);
                        Icon largelicon = Icons.IconFromExtension(file_type, Icons.SystemIconSize.Large);
                        small_img_list.Images.Add(smallicon);
                        large_img_list.Images.Add(largelicon);
                    }
                    main_fileView.SmallImageList = small_img_list;
                    main_fileView.LargeImageList = large_img_list;
                    foreach (string file in files)
                    {
                        string file_name = file.Substring(file.LastIndexOf('''')+1,file.Length-(file.LastIndexOf('''')+1));
                        System.IO.FileInfo fileInfo = new System.IO.FileInfo(file);
                        string file_size = fileInfo.Length/1000+" kB";
                        string file_datemodified = fileInfo.LastWriteTime.ToString();
                        string file_createDate = fileInfo.CreationTime.ToString();
                        string[] item_ = { file_name, file_size, file_datemodified, file_createDate };
                        ListViewItem item = new ListViewItem(item_,n);
                        n++;
                        main_fileView.Items.Add(item);
                    }
                }
            }
        }

i've try replace

ListViewItem item = new ListViewItem(item_,n);

ListViewItem item = new ListViewItem(file_name, n);
                        item.SubItems.Add(file_size);
                        item.SubItems.Add(file_datemodified);
                        item.SubItems.Add(file_createDate);

但是结果仍然是一样的,在第一列的每个文本前面都有空格,但是没有显示图像。

去年编辑

最后我得到了它,这是我的错,问题不在代码的这条路径,在代码的其他路径有创建新的ImageList,我忘记在测试前注释它,这段代码工作正常,感谢大家的答案。

p。我不能在8小时内回答我自己的问题,因为名气太小了

在窗口形式的ListView中的图像问题(c#)

考虑到您在ListView中显示了在ComboBox中选择的文件的详细信息,您使用Details视图。换句话说,你在UI上看到网格。

在这种情况下,您必须为行指定一个特殊的列,并将所需的图像推入该单元格。

您可以在这里查看更复杂的解决方案:

ListView with Image on SubItems