c# 当 imageList 绑定到 ListView 时,imageList 第一个图像不显示

c# When imageList bind into ListView, imageList 1st image not displaying

我有一个 Listview 控制器与 imageList 绑定,Listview 项和 Imagelist 图像通过 while 循环添加。 dataReader(). 问题是在添加两个项目后,Listview 项目显示正确但第一个图像未显示意味着图像从 2nd listview 项目开始。我用调试模式检查了每一件事。然后我对 imagelist 感到困惑,因为第一次运行时它显示 COUNT1 然后下一个循环又是 COUNT 变成了 0 下一次它1,2,3,4,5,6.....等等

private void populate(MySqlDataReader data)
        {
            //ImageList
            ImageList imgList = new ImageList();

            //set listview category items as Large icons
            listView_Category.View = View.LargeIcon;
            imgList.Images.Clear();

            //ADD image list into Listview
            listView_Category.LargeImageList = imgList;

            Application.DoEvents();

            int i = 0;
            while (data.Read())
            {
                try
                {
                    imgList.Images.Add(Image.FromFile(@"./" + populateFolder + "/" + data.GetString(2)));
                }
                catch (Exception w)
                {
                    MessageBox.Show(w.Message);
                }

                imgList.ImageSize = new Size(100, 100);
                imgList.ColorDepth = ColorDepth.Depth32Bit;

                listView_Category.Items.Add(data.GetString(1), i);
                i++;

            }
        }

我也尝试手动添加图像...当它不起作用时。只是它通过循环添加图像。是语言错误吗?

//imgList.Images.Add(Image.FromFile(@"./" + populateFolder + "/image-1.jpg"));
            //imgList.Images.Add(Image.FromFile(@"./" + populateFolder + "/image-2.jpg"));
            //imgList.Images.Add(Image.FromFile(@"./" + populateFolder + "/image-3.jpg"));
            //imgList.Images.Add(Image.FromFile(@"./" + populateFolder + "/image-4.jpg"));
            //imgList.Images.Add(Image.FromFile(@"./" + populateFolder + "/image-5.jpg"));
            //imgList.Images.Add(Image.FromFile(@"./" + populateFolder + "/image-6.jpg"));
            //imgList.Images.Add(Image.FromFile(@"./" + populateFolder + "/image-7.jpg"));
            //imgList.Images.Add(Image.FromFile(@"./" + populateFolder + "/image-8.jpg"));
            //imgList.Images.Add(Image.FromFile(@"./" + populateFolder + "/image-9.jpg"));
            //imgList.Images.Add(Image.FromFile(@"./" + populateFolder + "/image-10.jpg"));
            //imgList.Images.Add(Image.FromFile(@"./" + populateFolder + "/image-11.jpg"));
            //imgList.Images.Add(Image.FromFile(@"./" + populateFolder + "/image-12.jpg"));

数据库

请试一试此代码将从文件夹中读取所有文件并将其添加显示在列表视图中。您只需要更改从 DB 读取它的逻辑。

    private void Form1_Load(object sender, EventArgs e)
    {
        var folderPath = @"c:\images\";
        DirectoryInfo dir = new DirectoryInfo(folderPath);

        var imageList = new ImageList();
        foreach (FileInfo file in dir.GetFiles())
        {
            try
            {
               imageList.Images.Add(Image.FromFile(file.FullName));
            }
            catch{
                Console.WriteLine("This is not an image file");
            }
        }
        this.listView1.View = View.LargeIcon;
        imageList.ImageSize = new Size(128, 128);
        this.listView1.LargeImageList = imageList;

        for (int j = 0; j < imageList.Images.Count; j++)
        {
            ListViewItem item = new ListViewItem();
            item.ImageIndex = j;
            this.listView1.Items.Add(item);
        }
    }