Solved

How to add pictures to a listview control.

Posted on 2010-08-26
11
460 Views
Last Modified: 2013-12-17
I'm adding the path to the video files to the listview control but i cant figure out how to add an image to each row or item.  here is the code i'm using:

listView1.Items.Clear();
                foreach (string files in Directory.GetFiles(dlg.SelectedPath))
                {
                    if ((files.EndsWith(".avi")) || files.EndsWith(".mpeg"))
                    {
                        listView1.Items.Add(files);
                    }
                }
How can i add an image and only list the name of the file not the whole path?

Any help would be appreciated.

Thanks
0
Comment
Question by:thecruz
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 5
11 Comments
 

Author Comment

by:thecruz
ID: 33534670
This works when you're adding items manually.  I'm trying to add them using the code above.
0
 
LVL 14

Expert Comment

by:systan
ID: 33538808
Don't forget to add picture in picturebox1, or if you have a high memory, try to uncomment //-getimage-
private void button?_Click(object sender, EventArgs e)
        {
            listView1.Items.Clear();
            FolderBrowserDialog dlg = new FolderBrowserDialog();
            dlg.ShowDialog(); 
            if (dlg.SelectedPath == "") return;
            foreach (string files in Directory.GetFiles(dlg.SelectedPath))
            {
                if ((files.EndsWith(".avi")) || files.EndsWith(".mpeg"))
                {

                    ImageList Imagelist1 = new ImageList();
                    Imagelist1.ColorDepth = ColorDepth.Depth32Bit; 
                    Imagelist1.ImageSize = new Size  (100, 80);
                    
                    
                    
                    listView1.View = View.LargeIcon;
                    listView1.LargeImageList = Imagelist1;


                    ListViewItem ThumbEntry = new ListViewItem();
                    ThumbEntry.Text = files;
                    Imagelist1.Images.Add(pictureBox1.Image);
//-getimage-
//Image i = Image.FromFile(files);
//Imagelist1.Images.Add(i.GetThumbnailImage(100, 80, null, IntPtr.Zero) );


                    ThumbEntry.ImageIndex = Imagelist1.Images.Count - 1;
                    listView1.Items.Add(ThumbEntry);
                }
            }
        }
        

Open in new window

0
Get free NFR key for Veeam Availability Suite 9.5

Veeam is happy to provide a free NFR license (1 year, 2 sockets) to all certified IT Pros. The license allows for the non-production use of Veeam Availability Suite v9.5 in your home lab, without any feature limitations. It works for both VMware and Hyper-V environments

 
LVL 14

Expert Comment

by:systan
ID: 33538836
//-getimage-
//Image i = Image.FromFile(files);
//Imagelist1.Images.Add(i.GetThumbnailImage(100, 80, null, IntPtr.Zero) );

Probably that will not work, because your dealing with video files not image files.
Instead,  use the picturebox to load image in your listview video image.
0
 
LVL 14

Accepted Solution

by:
systan earned 500 total points
ID: 33538923
OR if you really really want the video image icon? Here it is;
        private void button6_Click(object sender, EventArgs e)
        {
            listView1.Items.Clear();
            FolderBrowserDialog dlg = new FolderBrowserDialog();
            dlg.ShowDialog(); 
            if (dlg.SelectedPath == "") return;
            foreach (string files in Directory.GetFiles(dlg.SelectedPath))
            {
                if ((files.EndsWith(".avi")) || files.EndsWith(".mpeg"))
                {
                    ImageList Imagelist1 = new ImageList();
                    Imagelist1.ColorDepth = ColorDepth.Depth32Bit; 
                    Imagelist1.ImageSize = new Size  (100, 80);
                    listView1.View = View.LargeIcon;
                    listView1.LargeImageList = Imagelist1;
                    ListViewItem ThumbEntry = new ListViewItem();
                    ThumbEntry.Text = files;

                    Icon eIcon = System.Drawing.Icon.ExtractAssociatedIcon(files);
                    Imagelist1.Images.Add(eIcon);

                    ThumbEntry.ImageIndex = Imagelist1.Images.Count - 1;
                    listView1.Items.Add(ThumbEntry);
                }
            }
        }

Open in new window

0
 

Author Comment

by:thecruz
ID: 33545214
This is working so far.  Please look at the following code.  I'm adding my images to a flowlayoutpanel control.  when i select a folder that contains a significant amount of picture it crashes saying "Out of memory"  is there anything i can do to fix it?

private void openFolderToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog dlg = new FolderBrowserDialog();
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                flowLayoutPanel1.Controls.Clear();

                foreach (string files in Directory.GetFiles(dlg.SelectedPath))
                {
                    GlovalVars.SelPath1 = dlg.SelectedPath;
                    if ((files.EndsWith(".jpg")) || files.EndsWith(".jpeg"))
                    {
                        FileStream st = new FileStream(files, FileMode.Open);
                        PictureBox pb = new PictureBox();
                        pb.SizeMode = PictureBoxSizeMode.StretchImage;
                        pb.Width = 75;
                        pb.Height = 75;
                        pb.Image = Image.FromStream(st);
                        st.Close();
                        flowLayoutPanel1.Controls.Add(pb);
                        pb.Click += new EventHandler(view);

                    }
                }
                           
                listView1.Items.Clear();
                foreach (string files in Directory.GetFiles(dlg.SelectedPath))
                {
                    if ((files.EndsWith(".avi")) || files.EndsWith(".mpeg"))
                    {
                        ImageList Imagelist1 = new ImageList();
                        Imagelist1.ColorDepth = ColorDepth.Depth32Bit;
                        Imagelist1.ImageSize = new Size(25, 25);
                        listView1.View = View.LargeIcon;
                        listView1.LargeImageList = Imagelist1;
                        ListViewItem ThumbEntry = new ListViewItem();

                        FileInfo file = new FileInfo(files);

                        ThumbEntry.Text = file.Name;

                        Icon eIcon = System.Drawing.Icon.ExtractAssociatedIcon(files);
                        Imagelist1.Images.Add(eIcon);

                        ThumbEntry.ImageIndex = Imagelist1.Images.Count - 1;
                        listView1.Items.Add(ThumbEntry);
                    }
                }
            }
        }
0
 
LVL 14

Expert Comment

by:systan
ID: 33549646
//FileInfo file = new FileInfo(files); you dont need this
ThumbEntry.Text = files; //just like this

your possible error is here
>>pb.Image = Image.FromStream(st);

try to make a new image and assign it to pb.image
then close or dispose it before the loop again
0
 

Author Comment

by:thecruz
ID: 33549945
How would i do that.  Sorry to bug you but i'm new to this.  The reason why i used the fileinfo is because i wanted to display the filename instead of the whole path.
0
 
LVL 14

Expert Comment

by:systan
ID: 33550512
Image im = Image.FromStream(st);
pb.Image = im.GetThumbnailImage(75, 75, null, IntPtr.Zero);



0
 

Author Comment

by:thecruz
ID: 33550608
that did it.  you're the man.  Thanks
0
 

Author Comment

by:thecruz
ID: 33653739
this is now still giving me more memory errors
0

Featured Post

MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
In this video, viewers will be given step by step instructions on adjusting mouse, pointer and cursor visibility in Microsoft Windows 10. The video seeks to educate those who are struggling with the new Windows 10 Graphical User Interface. Change Cu…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…

615 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question