Как добавить listViewItem со своим уникальным изображением
CView 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 ответ
Решение
Есть две вещи, которые вам нужно сделать
- Добавить изображение в 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;