如何添加具有自己唯一图像的listViewItem

时间:2013-03-26 19:00:28

标签: c# .net listview listviewitem imagelist

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

        }

1 个答案:

答案 0 :(得分: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;