Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

How to add pictures to a listview control.

Posted on 2010-08-26
11
Medium Priority
?
465 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
  • 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
Visualize your virtual and backup environments

Create well-organized and polished visualizations of your virtual and backup environments when planning VMware vSphere, Microsoft Hyper-V or Veeam deployments. It helps you to gain better visibility and valuable business insights.

 
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 2000 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

 [eBook] Windows Nano Server

Download this FREE eBook and learn all you need to get started with Windows Nano Server, including deployment options, remote management
and troubleshooting tips and tricks

Question has a verified solution.

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

Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Simulator games are perfect for generating sample realistic data streams, especially for learning data analysis. It is even useful for demoing offerings such as Azure stream analytics, PowerBI etc.
In a question here at Experts Exchange (https://www.experts-exchange.com/questions/29062564/Adobe-acrobat-reader-DC.html), a member asked how to create a signature in Adobe Acrobat Reader DC (the free Reader product, not the paid, full Acrobat produ…
Despite its rising prevalence in the business world, "the cloud" is still misunderstood. Some companies still believe common misconceptions about lack of security in cloud solutions and many misuses of cloud storage options still occur every day. …
Suggested Courses

824 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