Principales respuestas
Problema con copiar/pegar a un picturebox con contextmenu

Pregunta
-
Respuestas
-
Entonces, para los casos del explorardor, no uses GetImage() ya que lo que debes recuperar es un CF_DROP.
Vos condicionas la acción de acuerdo al formato que haya en el clipboard en ese momento.
Digo, al código que ya tienes, debes agregar el código necesario para aceptar ese otro formato.
La data que se recupera es un handle HDROP, que representa un objeto del cual recuperas el nombre del o de los archivos seleccionados.
Supongo que la clase clipboard ya trae implementado el uso de este formato. Lee la doc. Digo, el vb de win32 lo hacía.
===
Private Sub PegarToolStripMenuItemClick(sender As Object, e As EventArgs) Dim cm As ContextMenuStrip = DirectCast(DirectCast(sender, ToolStripMenuItem).Owner, ContextMenuStrip) If Clipboard.ContainsImage() Then DirectCast(cm.SourceControl, PictureBox).Image = Clipboard.GetImage() ElseIf Clipboard.ContainsFileDropList() Then Dim sc As StringCollection = Clipboard.GetFileDropList() DirectCast(cm.SourceControl, PictureBox).Image = New Bitmap(sc(0)) End If End Sub
Me faltó el namespace
Imports System.Collections.Specialized
- Marcado como respuesta ledono viernes, 25 de marzo de 2011 2:02
Todas las respuestas
-
Hola ledono, puedes poner el código que está provocando el error?
Javier Torrecilla
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi Blog: Jtorrecilla
Enlace a Faq de Winforms en Ingles Muy bueno -
Aqui aparece el error. Lo que quiero es copiar y pegar imagenes desde el portapapeles desde un picturebox a otro, o de otra aplicacion al picturebox.
Private sub CopyToolStripMenuItem_click(sender as system.object, e as system.eventargs) Handles CopyToolStripMenuItem.click
Dim cPicturebox as PictureBox = Ctype(sender, cPicturebox)
ClipBoard.SetImage(cPicturebox.Image)
End Sub
-
Hola,
El problema se debe a que el sender que estás utilizando es el control que desencadana el evento, en este caso es un elemento de tipo toolStripMenu, y por ello te da esa excepcion.
Tendrías que controlar el evento Click de los PictureBox para almacenar en una variable privada del formulario cual es el control seleccionado para poder utilizarlo en el evento que has indicado.
Javier Torrecilla
Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
Si la respuesta te ha sido util Votala.
Mi Blog: Jtorrecilla
Enlace a Faq de Winforms en Ingles Muy bueno -
-
-
Haciendo esto funciona, para el boton copy:
Dim rClickedPBoxCopy as PictureBox
Dim rClickedPBoxPaste as Picturebox
rClickedPBoxCopy = ContextMenuStrip1.SourceControl
Clipboard
Para el boton paste:
rClickedPBoxPaste = ContextMenuStrip1.SourceControl
rClickedPBoxPaste.Image =
Pero no me sirve para cargar una imagen copiada de otra parte. Necesito algo general.
Clipboard.GetImage -
-
-
-
Entonces, para los casos del explorardor, no uses GetImage() ya que lo que debes recuperar es un CF_DROP.
Vos condicionas la acción de acuerdo al formato que haya en el clipboard en ese momento.
Digo, al código que ya tienes, debes agregar el código necesario para aceptar ese otro formato.
La data que se recupera es un handle HDROP, que representa un objeto del cual recuperas el nombre del o de los archivos seleccionados.
Supongo que la clase clipboard ya trae implementado el uso de este formato. Lee la doc. Digo, el vb de win32 lo hacía.
===
Private Sub PegarToolStripMenuItemClick(sender As Object, e As EventArgs) Dim cm As ContextMenuStrip = DirectCast(DirectCast(sender, ToolStripMenuItem).Owner, ContextMenuStrip) If Clipboard.ContainsImage() Then DirectCast(cm.SourceControl, PictureBox).Image = Clipboard.GetImage() ElseIf Clipboard.ContainsFileDropList() Then Dim sc As StringCollection = Clipboard.GetFileDropList() DirectCast(cm.SourceControl, PictureBox).Image = New Bitmap(sc(0)) End If End Sub
Me faltó el namespace
Imports System.Collections.Specialized
- Marcado como respuesta ledono viernes, 25 de marzo de 2011 2:02
-