Скопировать файлы в буфер обмена в С#
У меня есть Windows Forms TreeView ( node, подузлы). Каждый node содержит некоторую дополнительную информацию в своем теге. Кроме того, каждый узел отображает файл на диске. Самый простой способ скопировать/вырезать/вставить узлы/файлы в С#?
Было бы неплохо иметь пример кода.
Ответы
Ответ 1
Рассмотрите возможность использования класса буфера обмена. Он содержит все методы, необходимые для размещения данных в буфере обмена Windows и для извлечения данных из буфера обмена Windows.
StringCollection paths = new StringCollection();
paths.Add("f:\\temp\\test.txt");
paths.Add("f:\\temp\\test2.txt");
Clipboard.SetFileDropList(paths);
В приведенном выше коде будут помещены файлы test.txt и test2.txt для копирования в буфер обмена Windows. После выполнения кода вы можете перейти к любой папке и вставить (Ctrl + V) файлы. Это эквивалентно выбору обоих файлов в проводнике Windows и выборе копирования (Ctrl + C).
Ответ 2
Если вы только копируете и вставляете в свое приложение, вы можете сопоставить операцию вырезания/копирования вашего дерева с методом, который просто клонирует выбранный вами node. То есть:
TreeNode selectedNode;
TreeNode copiedNode;
selectedNode = yourTreeview.SelectedNode;
if (selectedNode != null)
{
copiedNode = selectedNode.Clone;
}
// Then you can do whatever you like with copiedNode elsewhere in your app.
Если вы хотите иметь возможность вставлять в другие приложения, вам придется использовать буфер обмена. Вы можете получить немного больше, чем просто текст, узнав больше об интерфейсе IDataObject. Я не могу вспомнить источник, но здесь что-то имею в своих заметках:
При реализации в классе Методы IDataObject позволяют пользователю хранить данные в нескольких форматах в экземпляр класса. Хранение данных в более одного формата вероятность того, что целевое приложение, чьи требования к формату вы могли бы не знаю, может получить сохраненный данные. Сохранение данных в экземпляре IDataObject, вызовите метод SetData и укажите формат данных в формат. Установите autoConvert параметр false, если вы не хотите сохраненные данные для преобразования в другой формат, когда он извлекается. взывать SetData несколько раз в одном экземпляре IDataObject для хранения данных в более чем один формат.
После того, как вы заполнили объект, который реализует IDataObject (например, что-то называемое yourTreeNodeDataObject), вы можете позвонить:
Clipboard.SetDataObjecT(yourTreeNodeDataObject);