Solved

How to add pictures to a listview control.

Posted on 2010-08-26
11
459 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
Why You Need a DevOps Toolchain

IT needs to deliver services with more agility and velocity. IT must roll out application features and innovations faster to keep up with customer demands, which is where a DevOps toolchain steps in. View the infographic to see why you need a DevOps toolchain.

 
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

Summary Displaying images in RichTextBox is a common requirement with limited solutions available. Pasting through clipboard or embedding into RTF content only support static images.  This article describes how to insert Windows control objects int…
This article describes relatively difficult and non-obvious issues that are likely to arise when creating COM class in Visual Studio and deploying it by professional MSI-authoring tools. It is assumed that the reader is already familiar with the cla…
There are cases when e.g. an IT administrator wants to have full access and view into selected mailboxes on Exchange server, directly from his own email account in Outlook or Outlook Web Access. This proves useful when for example administrator want…
In this video we outline the Physical Segments view of NetCrunch network monitor. By following this brief how-to video, you will be able to learn how NetCrunch visualizes your network, how granular is the information collected, as well as where to f…

734 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