Скопируйте файлы в буфер обмена в C # - PullRequest
23 голосов
/ 17 октября 2008

У меня есть Windows Forms TreeView (узел, подузлы). Каждый узел содержит некоторую дополнительную информацию в своем теге. Кроме того, каждый узел отображает файл на диске. Какой самый простой способ скопировать / вырезать / вставить узлы / файлы в C #?

Было бы неплохо иметь пример кода.

Ответы [ 2 ]

42 голосов
/ 17 октября 2008

Рассмотрите возможность использования класса буфера обмена . Он включает все методы, необходимые для помещения данных в буфер обмена 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).

5 голосов
/ 17 октября 2008

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

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 и укажите формат данных в параметр формата. Установите автоконвертировать параметр в false, если вы не хотите сохраненные данные для преобразования в другое формат при получении. взывать SetData несколько раз на одном экземпляре IDataObject для хранения данных в более чем один формат.

Как только вы заполнили объект, который реализует IDataObject (например, что называется yourTreeNodeDataObject ), вы можете вызвать:

Clipboard.SetDataObjecT(yourTreeNodeDataObject);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...