Как отобразить иконку в listview

239
06 ноября 2018, 08:00

Всем здравствуйте, подскажите как отобразить иконку в Listview. У меня есть класс,в котором я получаю данные для отображения,есть сама форма, иконку саму я получаю, но не отображается и все тут. Благодарен за помощь

// сам класс где создаются данные для отображения.
public class Controller
{
    public  List<info> PrintKeys(string rkey)
    {
        List<info> stroka=new List<info>();
        bool F = true;
        bool G = true;
        String rp = rkey;
        RegistryKey rk;
        using (rk = Registry.LocalMachine.OpenSubKey(rp))
        {
            var e = rk.GetValueNames().Select(n => new
            {
                Name = n,
                Value = rk.GetValue(n),
                Exec = rk.GetValue(n).ToString()
                    .Split('"').Where(i => !String.IsNullOrEmpty(i)).First()
            });
            foreach (var x in e)
            {
                var icon1 = Icon.ExtractAssociatedIcon(x.Exec).ToBitmap();
                stroka.Add(new info() { A = icon1, F1 = F,G1 = G,Namefile1 = x.Name, Path1 = x.Value});
            }
        }
        return stroka;
    }
}
//вот класс самой формы
public partial class Form1 : Form
{
    Controller c=new Controller(); 
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        listView1.Items.Clear();
        string r1 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; // реестр local mashin
        string r2 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; //реестр СCurren user
        string rp3 = @".DEFAULT\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; //реестр user 
        List<info> a = c.PrintKeys(r1);
        for (int i = 0; i < a.Count; i++)
        {
            listView1.Items.Add(a[i].Namefile1);
            listView1.Items[i].SubItems.Add((string) a[i].Path1);
            listView1.Items[i].SubItems.Add(a[i].F1.ToString());
            listView1.Items[i].SubItems.Add(a[i].G1.ToString());
            // и вот тут не работает, свойство А хранит в себе уже битмаповскую иконку
            listView1.Items[i].ImageList.Images.Add(a[i].A);
        }
    }
}
//И сам класс для данных
public class info
{
    public Bitmap A { get; set; } // иконка файла
    public string Namefile1 { get; set; } //Имя исполняемого файла.
    //public string C1 { get; private set; } //Параметры командной строки для запуска файла.
    public object Path1 { get; set; }// путь
    public bool F1 { get; set; }//Флаг наличия цифровой подписи.
    public bool G1 { get; set; }//Флаг корректности цифровой подписи
    public info() { }
}
Answer 1

Вы не указываете значение свойства ListViewItem.ImageIndex или ListViewItem.ImageKey, обратите внимание на тот факт, что эти свойства взаимоисключающие, т.е. если явно указано одно - второе будет сброшено в значение по-умолчанию (-1 или "" соответственно).

Измените немного логику заполнения ListView. Например так:

//Перед циклом создадим новый список изображений.
//По умолчанию они отсутствуют в ListView
var imList = new ImageList();
listView.LargeImageList = imList;
listView.SmallImageList = imList;
for (int i = 0; i < a.Count; i++)
{
    listView1.Items.Add(a[i].Namefile1);
    listView1.Items[i].SubItems.Add((string) a[i].Path1);
    listView1.Items[i].SubItems.Add(a[i].F1.ToString());
    listView1.Items[i].SubItems.Add(a[i].G1.ToString());
    //добавляем изображение с ключом в список
    imList.Images.Add(key: a[i].Namefile1, image: a[i].A);
    //указываем ключ для отображения картинки
    listView1.Items[i].ImageKey = a[i].Namefile1;
}
READ ALSO
Правильная реализация Dispose вместе с SafeHandleZeroOrMinusOneIsInvalid

Правильная реализация Dispose вместе с SafeHandleZeroOrMinusOneIsInvalid

В сети есть много примеров реализации паттерна Dispose применительно к оберткам для C++ DLL, но все они немного отличаются, такое ощущение, что многие...

188
wp_get_post_tags не получает id поста

wp_get_post_tags не получает id поста

Не могу понять почему wp_get_post_tags не получает ID поста

194
Почему не работает бот через curl method post?

Почему не работает бот через curl method post?

тренируюсь писать бота, хочу написать бота который будет авторизоваться в Twittercom и показывать ленту новостей

187