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

Posted

技术标签:

【中文标题】窗口形式的 ListView 中的图像问题(C#)【英文标题】:Problem with image in ListView in window form (C#) 【发布时间】:2011-09-04 10:02:54 【问题描述】:

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

这是我的代码

        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);

                    

                
            
        

我已经尝试替换

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,我忘记在测试前将其注释掉,这段代码可以正常工作,谢谢大家的回答。

ps。由于声誉太低,我无法在 8 小时内回答我自己的问题

【问题讨论】:

@Hans 我确实设置了,使用方法:public ListViewItem(string[] items,int imageIndex) here, ListViewItem item = new ListViewItem(item_,n); 【参考方案1】:

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

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

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

ListView with Image on SubItems

【讨论】:

感谢您的回答,但我想做的只是在第一列中显示图像,我认为 ListView 已经受支持,不是吗? @Carry All:如果您使用详细信息视图,您应该有一个图像列和一个文本列。要对每个单元格进行操作,您需要使用 ListViewItem 的 SubItems 属性。看看这里:***.com/questions/729090/… 我将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); 但结果还是一样,图片仍然没有显示

以上是关于窗口形式的 ListView 中的图像问题(C#)的主要内容,如果未能解决你的问题,请参考以下文章

C# WPF - Listview 绑定不起作用

C#中两个窗体间的函数调用

如何在 C#中的listView 控件中显示图片?

如何在 C#中的listView 控件中显示图片?

ListView图像有时在winform c#中放错位置并消失

下载图像缩略图并在 ListView C# 中显示它们