Обновление картинок в imagelist

Всем привет у меня три вопроса: подскажите, пожалуйста, как можно 1. Обновить содержимое imagelist (при добавлении или удалении картинки в папке)? 2. Добавить имена картинкам? 3. По щелчку по картинке картинка увеличивалась или открывалась в виндовом просмоторщике? Заранее спасибо!!!
public Form1()
        {
            InitializeComponent();
            imageList1 = new ImageList();
            imageList1.ImageSize = new Size(255, 255);                  
            
        }
      
        private void Form1_Load(object sender, EventArgs e)
        {
 
            ************* dir = new *************(@"C:\Documents and Settings\All Users\Документы\Мои рисунки\Образцы рисунков");
 
            foreach (FileInfo file in dir.GetFiles())
            {
                try
                {
                    this.imageList1.Images.Add(Image.FromFile(file.FullName));
                }
                catch
                {
                }
            }
 
            this.listView1.View = View.LargeIcon;
 
            this.imageList1.ImageSize = new Size(100, 80);
 
            this.listView1.LargeImageList = this.imageList1;
 
            for (int j = 0; j < this.imageList1.Images.Count; j++)
            {
 
                ListViewItem item = new ListViewItem();
 
                item.ImageIndex = j;
 
                this.listView1.Items.Add(item);
 
            }
           // вывести имена файлов
           
        }
          private void button1_Click(object sender, EventArgs e)
        {
            //обновить список картинок
 
            //listView1.BeginUpdate();
            //listView1.EndUpdate();
        }
 
        private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
          //увеличить текущую иконку
        }
Нашел подобную штуку http://www.codeproject.com/KB/dotnet/PhotoAndVideoViewer.aspx ну как то для меня сложновато (да и много лишнего)
4 ответа

using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
 
namespace WindowsFormsApplicationTest2 {
    public partial class MainForm : Form {
        private readonly string dirPath;
        private readonly FileSystemWatcher watcher;
 
        public MainForm() {
            InitializeComponent();
            dirPath = Path.Combine( Environment.CurrentDirectory, "Images" );
 
            // Наблюдатель за файлами в директории
            watcher = new FileSystemWatcher( dirPath ) {
                NotifyFilter = NotifyFilters.FileName,
                Filter = "*.jpg"
            };
 
            // События при удалении, переименовании и создании файла
            watcher.Deleted += WatcherChanged;
            watcher.Renamed += WatcherChanged;
            watcher.Created += WatcherChanged;
        }
 
        private void MainFormLoad( object sender, EventArgs e ) {
            // Загружаем файлы
            ScanFiles();
 
            // Запускаем наблюдатель
            watcher.EnableRaisingEvents = true;
        }
 
        private void ScanFiles() {
            // Получаем список файлов
            var files = Directory.GetFiles( dirPath, "*.jpg" ).Select( Path.GetFileName ).ToArray();
            if ( files.Length > 0 ) {
                // Добавляем их в listBox1
                listBox1.Items.AddRange( files );
            }
        }
 
        private void ListBox1SelectedIndexChanged( object sender, EventArgs e ) {
            if ( listBox1.SelectedItem != null ) {
                // Имя файла
                string fileName = listBox1.SelectedItem.ToString();
 
                // Проверяем, не загружен ли он уже
                if ( !imageList1.Images.ContainsKey( fileName ) ) {
                    // Загружаем картинку
                    using ( Bitmap bitmap = new Bitmap( Path.Combine( dirPath, fileName ) ) ) {
                        // Копируем её в imageList1, попутно уменьшая
                        imageList1.Images.Add( fileName, new Bitmap( bitmap, imageList1.ImageSize ) );
                    }
                }
 
                // Показываем картинку
                pictureBox1.Image = imageList1.Images[ fileName ];
            }
        }
 
        // Событие при изменении файлов
        private void WatcherChanged( object sender, FileSystemEventArgs e ) {
            // Очищаем список
            listBox1.SelectedIndex = -1;
            listBox1.Items.Clear();
            pictureBox1.Image = null;
 
            // Пересканируем файлы
            ScanFiles();
        }
 
        // Открытие файла
        private void buttonOpen_Click( object sender, EventArgs e ) {
            string fileName = listBox1.SelectedItem.ToString();
            Process.Start( Path.Combine( dirPath, fileName ) );
        }
    }
}
Программа: WindowsFormsApplicationTest2.zip Если запускать из студии, может вылететь. Запускать лучше из папки.


Спасибо конечно но немнрго не то хотелось бы усовершенствовать мой код


А самому не? У меня не так много свободного времени, чтобы ещё и копаться в чужом коде. Особенно если его автор сам ничего не может сделать.


Я только учусь, и поверь мне, я стараюсь! И пишу на форуме только после того как проштудирую весь форум и google!