portapapeles pegar net copiar c# winforms clipboard

pegar - Copie los archivos al portapapeles en C#



vb net copiar al portapapeles (2)

Tengo Windows Forms TreeView (nodo, subnodos). Cada nodo contiene algo de información adicional en su etiqueta. Además, cada nodo mapea un archivo en el disco. ¿Cuál es la forma más fácil de copiar / cortar / pegar nodos / archivos en C #?

Sería bueno tener un código de muestra.


Considere usar la clase Portapapeles . Cuenta con todos los métodos necesarios para poner datos en el portapapeles de Windows y para recuperar datos del portapapeles de Windows.

StringCollection paths = new StringCollection(); paths.Add("f://temp//test.txt"); paths.Add("f://temp//test2.txt"); Clipboard.SetFileDropList(paths);

El código anterior colocará los archivos test.txt y test2.txt para copiar en el Portapapeles de Windows. Después de ejecutar el código puede navegar a cualquier carpeta y Pegar (Ctrl + V) los archivos. Esto es equivalente a seleccionar ambos archivos en el Explorador de Windows y seleccionar copiar (Ctrl + C).


Si solo está copiando y pegando dentro de su aplicación, puede asignar la operación de cortar / copiar de su vista de árbol a un método que simplemente clone su nodo seleccionado. Es decir:

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.

Si quiere pegar en otras aplicaciones, deberá usar el portapapeles. Puede obtener un poco más elegante que simplemente texto aprendiendo más sobre la interfaz IDataObject . No recuerdo la fuente pero aquí hay algo que tenía en mis propias notas:

Cuando se implementan en una clase, los métodos de IDataObject permiten al usuario almacenar datos en múltiples formatos en una instancia de la clase. Almacenar datos en más de un formato aumenta las posibilidades de que una aplicación objetivo, cuyos requisitos de formato no sepan, pueda recuperar los datos almacenados. Para almacenar datos en una instancia de IDataObject, llame al método SetData y especifique el formato de datos en el parámetro de formato. Establezca el parámetro autoConvert en false si no desea que los datos almacenados se conviertan a otro formato cuando se recupere. Invoque SetData varias veces en una instancia de IDataObject para almacenar datos en más de un formato.

Una vez que ha poblado un objeto que implementa IDataObject (por ejemplo, algo llamado yourTreeNodeDataObject ), puede llamar a:

Clipboard.SetDataObjecT(yourTreeNodeDataObject);