在C#中将文件复制到剪贴板

23 c# clipboard winforms

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

有一些示例代码会很高兴.

Jor*_*ira 43

考虑使用Clipboard类.它具有将数据放在Windows剪贴板上以及从Windows剪贴板检索数据所需的所有方法.

StringCollection paths = new StringCollection();
paths.Add("f:\\temp\\test.txt");
paths.Add("f:\\temp\\test2.txt");
Clipboard.SetFileDropList(paths);
Run Code Online (Sandbox Code Playgroud)

上面的代码将把文件test.txt和test2.txt放在Windows剪贴板上进行复制.执行代码后,您可以导航到任何文件夹并粘贴(Ctrl + V)文件.这相当于在Windows资源管理器中选择两个文件并选择复制(Ctrl + C).

  • 剪贴板只是一个占位符.当数据传输到剪贴板时,没有关于这是复制操作还是剪切操作的信息.调用操作的责任是根据保存的状态区分彼此. (3认同)
  • 例如,当您在Word上剪切时,会立即从文档中删除剪切的文本.剪切的文本放在Windows剪贴板上,然后可以按需粘贴. (3认同)

AR.*_*AR. 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.
Run Code Online (Sandbox Code Playgroud)

如果您希望能够粘贴到其他应用程序,那么您将不得不使用剪贴板.通过了解有关IDataObject接口的更多信息,您可以获得比纯文本更有趣的东西.我记不起来了,但这里有我自己的笔记:

在类中实现时,IDataObject方法允许用户在类的实例中以多种格式存储数据.以多种格式存储数据会增加您可能不知道其格式要求的目标应用程序可以检索存储数据的可能性.要将数据存储在IDataObject的实例中,请调用SetData方法并在format参数中指定数据格式.如果您不希望在检索存储数据时将其转换为其他格式,请将autoConvert参数设置为false.在一个IDataObject实例上多次调用SetData,以多种格式存储数据.

一旦填充了实现IDataObject的对象 (例如,名为yourTreeNodeDataObject的东西),就可以调用:

Clipboard.SetDataObjecT(yourTreeNodeDataObject);
Run Code Online (Sandbox Code Playgroud)