private void ClipboardReceived(object sender, RunWorkerCompletedEventArgs eventArgs) { if (!eventArgs.Cancelled && eventArgs.Error == null) { ArrayList data = (ArrayList)eventArgs.Result; if (data != null) { DataObject dataObj = new DataObject(); Console.WriteLine("Count: " + data.Count); for (int i = 0; i < data.Count; i++) { string format = (string)data[i++]; Console.WriteLine(format); dataObj.SetData(format, data[i]); } if (dataObj.ContainsFileDropList()) { StringCollection files = dataObj.GetFileDropList(); dataObj = new DataObject(); StringCollection adjusted = new StringCollection(); foreach (string f in files) { if (!f.StartsWith("\\")) { string toadd = "\\\\" + Ip + "\\" + f.Replace(":", ""); Console.WriteLine(toadd); adjusted.Add(toadd); } else { adjusted.Add(f); } } dataObj.SetFileDropList(adjusted); } Clipboard.SetDataObject(dataObj); } } }
} // DataGridMain_DragEnter private void DataGridMain_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { if (DataGridMain.SelectedItem != null) { // Цепляем выбранный файл FileProps fp = DataGridMain.SelectedItem as FileProps; // Декомпрессим файл на сервере (на сервере создаётся его расжатая копия) Basic.Proxy.DecompressFile(fp.FullName); // Которая в последствии и "вытаскивает" пользователь // Сделал так т.к. понятия не имею, как можно по средствам // Drag&Drop создать в месте куда перетаскивается файл сам файл. // Расжать файл в MemoryStream, а из MemeryStream этот файл нужно // как-то создать и нужен хотя бы путь места куда происходит Drop. // Вопрос: откуда этот путь взять? // Получаем файл уже у клиента посредствам перетаскивания // Передаваемые данные. Представляет базовую реализацию IDataObject DataObject data = new DataObject(); // Коллекция строк с нашими выделенными объектами, а точнее // переносить будем расжатую копию StringCollection fileDropList = new StringCollection { fp.FullName+"~" }; // Список перенесённых данных указывается в виде коллекции строк data.SetFileDropList(fileDropList); // Сохраняет указанные данные в этом объекте данных data.SetData("NFS", 0); // Инициирует операцию перетаскивания мышью DragDrop.DoDragDrop(DataGridMain, data, DragDropEffects.Copy); // Удаляем расжатую копию Basic.Proxy.DeleteFile(fp.FullName + "~"); } // if } // DataGridMain_MouseDown