Добрый день!
Я сделал форму для печати изображений. Можно добавлять и удалять изображения, но при удалении сразу кричит, что файл занят другим процессом.
На форме есть элемент ListView (в нем названия добавленных изображений) и PictureBox (для отображения текущего изображения)
Вот мой код:
| Код | private void PrintDog_Load(object sender, EventArgs e) { listview.Clear(); /*Очищаем список. Дальше в коде я буду вызывать ф-ю PrintDog_Load для перезаполнения списка*/
string[] file = Directory.GetFiles("D:\\Images\\", "*.jpg"); /*Получаем список файлов*/ if (file.Length <= 0) return;
for (int i = 0; i < file.Length; i++) { listview.Items.Add("Изображение " + Convert.ToString(i + 1)); /*Добавляем запись в список*/ listview.Items[i].Tag = file[i]; /*Св-ву Tag присваиваем полный путь к файлу*/ }
listview.Items[0].Selected = true; /*Выбираем первую запись*/ }
/*Обработчик события нажатия кнопки "Добавить". Выбранные изображения я копирую в папку "D:\Images\" со своим именем файла (так надо по задумке)*/ private void b_add_Click(object sender, EventArgs e) { if (dlg.ShowDialog() == DialogResult.OK) { string[] files = dlg.FileNames;
for (int i = 0; i < files.Length; i++) { string path = "D:\\Images\\" + DateTime.Now.ToShortDateString() + "_" + DateTime.Now.Hour.ToString() + "-" + DateTime.Now.Minute.ToString() + "-" + DateTime.Now.Second.ToString() + "_" + i.ToString() + ".jpg";
/*Изменяю размеры выбранных файлов на свои*/ Image img = Image.FromFile(files[i]);
int W = 794; int H = 1123;
if (img.Width < W) W = img.Width;
if (img.Height < H) H = img.Height;
Bitmap bmp = new Bitmap(img, new Size(W, H)); bmp.SetResolution(96, 96); bmp.Save(path, ImageFormat.Jpeg);
bmp.Dispose(); img.Dispose(); }
PrintDog_Load(null, null); /*Перезаполняем список*/ } }
/*Обработка события при выборе строки из списка*/ private void listview_SelectedIndexChanged_1(object sender, EventArgs e) { image.Image = Image.FromFile((string)listview.SelectedItems[0].Tag); /*Отображаем изображение в PictureBox`е*/ }
/*Обработка нажатия на кнопку "Удалить"*/ private void b_del_Click(object sender, EventArgs e) { image.Image = null; //Обнуляем PictureBox
for(int i = 0; i < listview.SelectedItems.Count; ) { File.Delete(listview.SelectedItems[i].Tag.ToString()); /*Удаляем файл*/ listview.SelectedItems[i].Remove(); /*Удаляем запись из списка*/ } }
|
При попытке удалить первый файл из выбранных происходит ошибка "Файл занят другим процессом...", но если проигнорировать ее, то все остальные выбранные изображения удаляться нормально.
Я уже не знаю что и делать. Подскажите пожалуйста. |