В разрабатываемом мной приложении потребовалось выполнять файловые операции с Проводником Windows через буфер обмена. Для того, чтобы Проводник смог узнать, хотите ли вы переместить или скопировать файл, необходимо в формате "Preferred DropEffect" объекта IDataObject указать желаемое действие. Для этого я написал маленький вспомогательный класс-extender для DataObject.
public static class DataObjectExtender
{
public static void SetPreferredDropEffect(this DataObject dataObject, DragDropEffects effect)
{
if (dataObject == null) throw new ArgumentNullException("dataObject");
byte[] data = BitConverter.GetBytes((uint) effect);
dataObject.SetData("Preferred DropEffect", new MemoryStream(data));
}
}
Теперь для того, чтобы скопировать файлы в буфер обмена, нужно выполнить
var dataObject = new DataObject();
dataObject.SetFileDropList(list); // list - экземляр StringCollection, содержащий список файлов и папок для копирования
dataObject.SetPreferredDropEffect(DragDropEffects.Copy|DragDropEffects.Link); //Разрешим создать копии или ярлыки на файлы
Clipboard.SetDataObject(dataObject, false);
А для выполнения операции <Вырезать> достаточно указать DragDropEffects.Move в SetPreferredDropEffect. Проводник сам позаботится о перемещении файлов в новое место.
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий