0

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

        }
4

1 回答 1

1

你需要做两件事

  • 将图像添加到 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;
于 2013-03-26T19:11:55.653 回答