27 feb 2009

Utilizando el portapapeles de Windows en nuestras aplicaciones .NET

Para manejar el portapapeles de Windows, el .Net Framework provee la clase Clipboard, del namespace My.Computerla cual posee todo lo necesario para copiar y pegar archivos, textos, imágenes, etc.


Veamos como copiar elementos al portapapeles:


  • My.Computer.Clipboard.SetImage(PictureBox1.Image) - Copia la imagen del picturebox

  • My.Computer.Clipboard.SetText(WebBrowser1.DocumentText, TextDataFormat.Html) - Copia el código HTML del documento que estamos mostrando en el WebBrowser como texto y setea el formato de éste como HTML.

  • My.Computer.Clipboard.SetText(RichTextBox1.Rtf, TextDataFormat.Rtf) - Ídem anterior pero formato RTF.

  • My.Computer.Clipboard.SetText(TextBox1.Text) - Copia un texto cualquiera, sin formato.

  • My.Computer.Clipboard.SetData(MyClassInstance.GetType().Name, MyClassInstance) - Copia el objeto MyClassInstance al portapapeles.



Ahora tenemos que recuperar los objetos que copiamos al portapapeles:


  • PictureBox2.Image = My.Computer.Clipboard.GetImage() - Recupera la imagen copiada al portapapeles y la setea como Image en el PictureBox2.

  • WebBrowser2.DocumentText = My.Computer.Clipboard.GetText(TextDataFormat.Html) - Obtiene el texto con formato HTML

  • RichTextBox2.Rtf = My.Computer.Clipboard.GetText(TextDataFormat.Rtf) - Idem anterior con formato RTF.

  • TextBox2.Text = My.Computer.Clipboard.GetText() - Recupera un texto sin formato y lo asigna en TextBox2.Text

  • Dim MyClassNewInstance As MyClass = CType(My.Computer.Clipboard.GetData(GetType(MyClass).Name), MyClass) - Recupera el objeto de tipo MyClass que copiamos anteriormente.



Para limpiar ó vaciar el portapapeles utilizaremos:


  • My.Computer.Clipboard.Clear()



Algunos controles que podemos hacer sobre la info contenida en el portapapeles:


  • If My.Computer.Clipboard.ContainsImage() Then - Para saber si hay una imagen en el portapapeles

  • If My.Computer.Clipboard.ContainsText(TextDataFormat.Html) - Para saber si el portapapeles contiene un texto en formato HTML

  • If My.Computer.Clipboard.ContainsData(GetType(MyClass).Name) Then - Comprueba si hay un objeto del tipo MyClass en el portapapeles.



Al preguntar por My.Computer.Clipboard.ContainsText(), se puede preguntar por varios formatos, los mismos se especifican en el Enum TextDataFormat:


  • CommaSeparatedValue

  • Html

  • Rtf

  • Text

  • UnicodeText



Y ese sería un resumen de los usos más frecuentes del portapapeles, aunque también se puede utilizar de varias maneras más, estas son las que consideré más útiles.

Una aclaración con respecto a copiar y pegar objetos, yo utilicé como nombre del formato el nombre del tipo tal cual se devuelve por GetType().Name, en ese parámetro se puede escribir cualquier String, pero considero una buena práctica utilizar el nombre del tipo para que al recuperar sepamos qué es lo que estamos buscando.

No hay comentarios:

Publicar un comentario