Drag & Drop ListView

293
01 августа 2017, 14:37

Ребят подскажите пожалуйста. Есть проект с перетаскиванием файла. Работает только с listbox. Не могу под listview переписать. Ошибки выдает ссылаясь на class FileStruct. Исходник проекта

using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace DaDExplorer
{
    public partial class Form1 : Form
    {
        Rectangle? dragRect;
        class FileStruct
        {
            public string File { get; set;  }
            public FileStruct ( string path ) {
                File = path;
            }
            public override string ToString () {
                return  Path.GetFileName(File);
            }
        }
        public Form1 () {
            InitializeComponent();
            listBox1.AllowDrop = true;
            listBox1.SelectionMode = SelectionMode.MultiSimple;
            listBox1.MouseDown += new MouseEventHandler(listBox1_MouseDown);
            listBox1.MouseMove += new MouseEventHandler(listBox1_MouseMove);
            listBox1.MouseUp += new MouseEventHandler(listBox1_MouseUp);
            listBox1.DragDrop += new DragEventHandler(listBox1_DragDrop);
            listBox1.DragEnter += new DragEventHandler(listBox1_DragEnter);
        }
        void listBox1_MouseUp ( object sender, MouseEventArgs e ) {
            dragRect = null;
        }
        void listBox1_DragEnter ( object sender, DragEventArgs e ) {
            if (!dragRect.HasValue && e.Data.GetDataPresent(DataFormats.FileDrop) && (e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)
                e.Effect = DragDropEffects.Move;
            else
                e.Effect = DragDropEffects.None;
        }
        void listBox1_DragDrop ( object sender, DragEventArgs e ) {
            if (e.Effect == DragDropEffects.Move) {
                string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
                // Добавление файлов в список
                for (int i = 0; i < files.Length; i++)
                    listBox1.Items.Add(new FileStruct(files[i]));
            }
        }
        void listBox1_MouseMove ( object sender, MouseEventArgs e ) {
            if (listBox1.SelectedIndices.Count > 0 && dragRect.HasValue && !dragRect.Value.Contains(e.Location) ){
                string[] files = new string[listBox1.SelectedIndices.Count];
                // Составляем список файлов
                for (int i = 0; i < files.Length; i++)
                {
//              files[i] = ((FileStruct)listBox1.SelectedItems[i]).File;
                    files[i] = ((FileStruct)listBox1.SelectedItems[i]).File;
                }
                // Формируем OLE объект
                IDataObject obj = new DataObject(DataFormats.FileDrop, files);
                DragDropEffects result = listBox1.DoDragDrop(obj,  DragDropEffects.Move);
                // Если было пермещение, то удаляем выделенные файлы из списка
                if ( result == DragDropEffects.Move) {
                    for (int i = files.Length - 1; i >= 0 ; i--) {
                        if (!File.Exists(files[i]))
                            listBox1.Items.RemoveAt(listBox1.SelectedIndices[i]);
                    }
                }
                dragRect = null;
            }
        }
        void listBox1_MouseDown ( object sender, MouseEventArgs e ) {
            dragRect = null;
            // Елсли нажата ЛКМ и CTRL
            if (e.Button == MouseButtons.Left) {  // && ModifierKeys == Keys.Control) {  ПРИ ЗАЖАТОМ CTR left
                dragRect = new Rectangle(
                    e.X - SystemInformation.DragSize.Width / 2, e.Y - SystemInformation.DragSize.Height / 2,
                    SystemInformation.DragSize.Width, SystemInformation.DragSize.Height
                    );
                listBox1.SelectedIndices.Add(listBox1.IndexFromPoint(e.Location));
            }
        }
    }
}
READ ALSO
Платные расширения приложения

Платные расширения приложения

ЗдравствуйтеЗанят разработкой приложения

257
C# / Try-Catch для большого колличества строк кода

C# / Try-Catch для большого колличества строк кода

Подскажите пожалуйста как лучше обработать исключения, которые могут возникнуть в процессе конвертации? строчек очень много, база спроектирована...

298
Задача в новом потоке по таймеру

Задача в новом потоке по таймеру

Есть метод который работает в отдельном от GUI потоке - обновляет коллекцию сообщений, которые получает из БДМетод запускается по таймеру...

226
C# проверка на null поля в в LINQ запросе

C# проверка на null поля в в LINQ запросе

Имеется следующий код:

335