28

我有一个Windows 窗体 TreeView(节点、子节点)。每个节点在其标签中都包含一些附加信息。此外,每个节点映射磁盘上的文件。在 C# 中复制/剪切/粘贴节点/文件的最简单方法是什么?

有一些示例代码会很好。

4

2 回答 2

50

考虑使用剪贴板类。它具有将数据放入 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)。

于 2008-10-17T10:07:28.393 回答
5

如果您只是在应用程序中复制和粘贴,则可以将树视图的剪切/复制操作映射到仅克隆所选节点的方法。IE:

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 方法并在 format 参数中指定数据格式。如果您不希望在检索存储的数据时将其转换为另一种格式,请将 autoConvert 参数设置为 false。在 IDataObject 的一个实例上多次调用 SetData 以以一种以上的格式存储数据。

一旦你填充了一个实现IDataObject的对象 (例如,称为yourTreeNodeDataObject的东西),那么你可以调用:

Clipboard.SetDataObjecT(yourTreeNodeDataObject);
于 2008-10-17T18:28:12.923 回答