0 votes

Problème de Listview SelectedIndexChanged

J'ai un Listview et je charge des images miniatures. Je voudrais sélectionner l'image miniature pour afficher l'image réelle dans le contrôle utilisateur. Lorsque je sélectionne la première image, elle ne s'affiche pas dans le contrôle de l'utilisateur. Mais lorsque je sélectionne la troisième image, cela fonctionne bien. Quel est le problème avec le code suivant ?

            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);

}

2voto

Mitch Wheat Points 169614

Les boucles ne devraient-elles pas être :

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

?

C'est le modèle standard pour un tableau/collection qui a une fonction Length propriété.

0voto

Voici ce que j'essaie de faire.

private void backgroundWorker_DoWork(object sen { 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; }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X