如何添加一个具有自己独特图像的listViewItem

本文关键字:自己 图像 listViewItem 一个 何添加 添加 | 更新日期: 2023-09-27 18:05:54

c#的ListView有以下添加条目的方法

public virtual ListViewItem Add(ListViewItem value)
public virtual ListViewItem Add(string text)
public virtual ListViewItem Add(string text, int imageIndex)
public virtual ListViewItem Add(string text, string imageKey)
public virtual ListViewItem Add(string key, string text, int imageIndex)
public virtual ListViewItem Add(string key, string text, string imageKey)

场景:我有一个ListView,并希望在第一列中动态添加具有自己唯一图像的ListViewItems。此外,这些图像可以根据状态变化进行更新

问题:你会怎么做?

我正在使用的代码

        private void AddToMyList(SomeDataType message)
        {
            string Entrykey = message.ID;
            //add its 1 column parameters
            string[] rowEntry = new string[1];
            rowEntry[0] = message.name;
            //make it a listviewItem and indicate its row
            ListViewItem row = new ListViewItem(rowEntry, (deviceListView.Items.Count - 1));
            //Tag the row entry as the unique id
            row.Tag = Entrykey;
            //Add the Image to the first column
            row.ImageIndex = 0;
            //Add the image if one is supplied
            imagelistforTypeIcons.Images.Add(Entrykey, message.marker.markerIcon);
            //finally add it to the device list view
            typeListView.Items.Add(row);
        }

如何添加一个具有自己独特图像的listViewItem

你需要做两件事

  • 如果图像不在ImageList中,则将其添加到ImageList
  • 创建新的ListViewItem并将前一点的图像分配给它

根据你的代码,它可以是这样的:

// Add markerIcon to ImageList under Entrykey
imagelistforTypeIcons.Images.Add(Entrykey, message.marker.markerIcon);
// Use icon from ImageList which is stored under Entrykey
ListViewItem row = new ListViewItem(rowEntry);
row.ImageKey = Entrykey;
// Do whatever else you need afterwards
row.Tag = Entrykey;
....

您的问题中的代码问题(没有实际尝试)看起来是在您分配的ImageIndex中。

  • 您正在将新图像添加到一个图像列表中,但将另一个图像分配给ListViewRow
  • 你在构造函数中提供图像索引,但之后将其设置为0(为什么?)
  • 你首先提供了错误的图像索引,因为你在添加新图像之前计算了图像列表中最后一个图像的索引。

所以你的代码也可以像这样:

// Add markerIcon to ImageList under Entrykey
imagelistforTypeIcons.Images.Add(Entrykey, message.marker.markerIcon);
// Use icon from ImageList which is stored under Entrykey
ListViewItem row = new ListViewItem(rowEntry);
row.ImageIndex = imagelistforTypeIcons.Items.Count - 1;
// Do whatever else you need afterwards
row.Tag = Entrykey;