我想用ListView做一个类似图片浏览器的工具,展示部份已经可以了,但当我选择一个item用listView1.Items.Remove(item);删除其对应项后,再去删本地图片时,提示图片文件正在使用,无法删除,请问要怎样才可以在删除Item后,删除对应的图片文件,谢谢:代码如下:        private void SetListView(string[] ImageName)
        {
            listView1.GridLines = true;
            listView1.FullRowSelect = true;
            listView1.HideSelection = false;
            listView1.HoverSelection = true;
            listView1.MultiSelect = true;            ImageList LargeImageList = new ImageList();
            LargeImageList.ImageSize = new Size(200, 200);
            ImageList SmallImageList = new ImageList();
            SmallImageList.ImageSize = new Size(100, 100);            int i = 0;
            foreach(string imagename in ImageName)
            {
                SmallImageList.Images.Add(Image.FromFile(imagename.Trim()));
                LargeImageList.Images.Add(Image.FromFile(imagename.Trim()));
                ListViewItem lv = new ListViewItem(imagename);
                //lv1.SubItems.Add("001");
                lv.ImageIndex = i;
                listView1.Items.Add(lv);
                i++;
            }
            listView1.LargeImageList = LargeImageList;
            listView1.SmallImageList = SmallImageList;
            listView1.Refresh();
        }        private void button4_Click(object sender, EventArgs e)
        {
            
            SetListView(new string[]{"Alt.PNG","Manicho.PNG"});        }        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            ListViewItem item = listView1.GetItemAt(e.X, e.Y);
            MessageBox.Show(item.Text);            string filename = item.Text.Trim();
            listView1.Items.Remove(item);
            //listView1.Dispose();
            File.Delete(filename);           &&这里出错
        }请大侠指教啊........

解决方案 »

  1.   

    不用说错误了,里面代码有问题,Image没有释放造成的SmallImageList.Images.Add(Image.FromFile(imagename.Trim()));
    LargeImageList.Images.Add(Image.FromFile(imagename.Trim()));===========》》》》Image temp = Image.FromFile(imagename.Trim());
    SmallImageList.Images.Add(Image.FromFile(new Bitmap(temp));
    LargeImageList.Images.Add(Image.FromFile(new Bitmap(temp));
    temp.Dispose();
      

  2.   

    Image   image1= new   Bitmap(""); 
    image1.Dispose(); 
    再删除
    或多线程
      

  3.   

    to mngzilin:
    你的方法我试了,不行.
    我改动后的代码如下:
            private void SetListView(string[] ImageName)
            {
                listView1.GridLines = true;
                listView1.FullRowSelect = true;
                listView1.HideSelection = false;
                listView1.HoverSelection = true;
                listView1.MultiSelect = true;            ImageList LargeImageList = new ImageList();
                LargeImageList.ImageSize = new Size(200, 200);
                ImageList SmallImageList = new ImageList();
                SmallImageList.ImageSize = new Size(100, 100);            int i = 0;
                foreach(string imageName in ImageName)
                {
                    Image tempImage = Image.FromFile(imageName.Trim());
                    SmallImageList.Images.Add(tempImage);
                    LargeImageList.Images.Add(tempImage);
                    tempImage.Dispose();                ListViewItem lv = new ListViewItem(imageName);
                    //lv1.SubItems.Add("001");
                    lv.ImageIndex = i;
                    listView1.Items.Add(lv);
                    i++;
                }
                
                listView1.LargeImageList = LargeImageList;   //报错,说参数没效
                listView1.SmallImageList = SmallImageList;
                
                listView1.Refresh();
            }
      listView1.LargeImageList = LargeImageList;
      listView1.SmallImageList = SmallImageList;
      listView1.Refresh();
      }listView1.LargeImageList = LargeImageList;   //时报错,调试发现LargeImageList中没有数据.
      

  4.   

    你很强,复制都会出问题,丢了红色的部分Image temp = Image.FromFile(imagename.Trim());
    SmallImageList.Images.Add(Image.FromFile(new Bitmap(temp));
    LargeImageList.Images.Add(Image.FromFile(new Bitmap(temp));
    temp.Dispose();
      

  5.   

    成功了...谢谢mngzilin.....呵呵..