tags:

views:

144

answers:

2

I have a Listview and loading thumbnail images. I would like to select the thumbnail image to display the actual image into the user control. When I select the first image it's not getting displayed into the user control. But when I select 3rd image it's working fine. What's wrong with the following code?

            string pname;
            Image myImage;
           for (i = 0; i <= files.Length ; i++)
            {
                pname = System.IO.Path.GetFullPath(files[i]);
                myImage = Image.FromFile(pname);
                ImgListView.Images.Add(getThumbnaiImage(ImgListView.ImageSize.Width, myImage));
                myImage = null;
            }


          for (i = 0; i <= files.Length ; i++)
            {
                fname = System.IO.Path.GetFileName(files[i]);
                ListViewItem lvwItem = new ListViewItem(fname, i);
                lvwItem.Tag = files[i];

                lstThumbNailView.Items.AddRange(new ListViewItem[] { lvwItem });
                lvwItem = null;
            }

private void listView_SelectedIndexChanged(Object sender, EventArgs e)
{
   ListView.SelectedListViewItemCollection selectedItems = lstThumbNailView.SelectedItems;

        ListViewItem lvi = lstThumbNailView.SelectedItems[0];
        string s = (string)lvi .Tag;
        this.viewer1.Image = Image.FromFile(s);

}
+2  A: 

Shouldn't the loops be:

      for (i = 0; i < files.Length ; i++)

?

That's the standard pattern for an array/collection that has a Length property.

Mitch Wheat
I am getting null reference exception with files.Length. If I use files.Length - 2 it works fine. But I still have the same issue.
So I guess you catch the exception somewhere, preventing the second loop to ever be executed. Show some more code, please.
Frank Bollack
A: 

Here is what I am trying to do.

private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { try{ int progress = 0;

        string pname;
        Image myImage;
        max_length = files.Length - 2;

        for (i = 0; i < files.Length; i++)
        {
          ProgressInfo info = new ProgressInfo();

            pname = System.IO.Path.GetFullPath(files[i]);
            myImage = Image.FromFile(pname);
            info.Image = myImage;
            info.ImageIndex = i;
            backgroundWorker1.ReportProgress(progress, info);
            myImage = null;
        }

       }
       catch (TargetInvocationException tiEx)
       {
           throw tiEx.InnerException;
       }
       catch (Exception ex)
       {
           throw ex.InnerException;
       }
    }


  private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        try
        {
             ProgressInfo img = e.UserState as ProgressInfo;
            //Set image to ListView here.
            ImgListView.Images.Add(getThumbnaiImage(ImgListView.ImageSize.Width, img.Image));
            fname = System.IO.Path.GetFileName(files[img.ImageIndex]);
            ListViewItem lvwItem = new ListViewItem(fname, img.ImageIndex);
            lvwItem.Tag = files[i];

            lstThumbNailView.Items.AddRange(new ListViewItem[] { lvwItem });

        }
        catch (TargetInvocationException tiEx)
        {
            throw tiEx.InnerException;
        }
        catch (Exception ex)
        {
            throw ex.InnerException;
        }
    }

class ProgressInfo
{
    public Image m_Image;
    public int m_ImageIndex;
          public Image Image
    {
        set { m_Image = value; }
        get { return m_Image; }
    }

    public int ImageIndex
    {
        set { m_ImageIndex = value; }
        get { return m_ImageIndex; }
    }
}