我有一个Windows Forms TreeView(节点,子节点)。每个节点在其Tag中包含一些附加信息。此外,每个节点都映射磁盘上的文件。在C#中复制/剪切/粘贴节点/文件最简单的方法是什么?
有一些示例代码会很好。
答案 0 :(得分:42)
考虑使用Clipboard class。它具有将数据放在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)。
答案 1 :(得分:5)
如果您只是在应用程序中复制和粘贴,则可以将树视图的剪切/复制操作映射到仅克隆所选节点的方法。即:
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);