2008-10-17 21 views
20

Tengo Windows FormsTreeView (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#?Copie archivos al portapapeles en C#

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

+0

algo como esto –

Respuesta

34

Considere utilizar el Clipboard class. 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 poner los archivos test.txt y test2.txt para la copia 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).

+1

portapapeles sólo es un marcador de posición. Cuando los datos se transfieren al portapapeles, no hay información sobre si se trata de una operación de copia o corte. Es responsabilidad de la operación de llamada distinguir uno de otro en función del estado guardado. –

+1

Por ejemplo, cuando corta Word, el texto cortado se elimina inmediatamente del documento. El texto cortado se coloca en el portapapeles de Windows y luego se puede pegar a pedido. –

5

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 solo 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 estás interesado en ser capaz de pegar a otras aplicaciones, entonces usted tendrá que utilizar el portapapeles. Puede obtener un poco más elegante que simplemente texto al aprender más acerca de la interfaz IDataObject. No puedo recordar la fuente, pero aquí hay algo que tenía en mis propias notas:

Cuando se implementa en una clase, los métodos 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 el posibilidad de que una aplicación de destino, cuyos requisitos de formato puede saber, puede 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 datos almacenados se conviertan a otro formato cuando se recupera. Invoque SetData varias veces en una instancia de IDataObject para almacenar datos en más que en un formato.

Una vez que haya pobladas un objeto que implementa IDataObject (por ejemplo, algo llamado yourTreeNodeDataObject), entonces se le puede llamar:

Clipboard.SetDataObjecT(yourTreeNodeDataObject); 
Cuestiones relacionadas