none
Problema con copiar/pegar a un picturebox con contextmenu RRS feed

  • Pregunta

  • Tengo multiples picturebox en los que voy a cargar imagenes estilo galeria. El problema aparece en evento click del contextmenustrip: "No se puede convertir un objeto de tipo toolstripmenuitem al tipo picturebox." Como puedo resolverlo?
    miércoles, 23 de marzo de 2011 12:51

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
    jueves, 24 de marzo de 2011 17:56

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
    miércoles, 23 de marzo de 2011 12:55
    Moderador
  • 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

    miércoles, 23 de marzo de 2011 14:05
  • 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
    miércoles, 23 de marzo de 2011 14:29
    Moderador
  • Javier me podrias ayudar con el codigo para eso.
    miércoles, 23 de marzo de 2011 15:14
  • Hola Walter, con eso me sigue apareciendo el mismo error.
    miércoles, 23 de marzo de 2011 17:07
  • Haciendo esto funciona, para el boton copy:

    Dim rClickedPBoxCopy as PictureBox

    Dim rClickedPBoxPaste as Picturebox

    rClickedPBoxCopy = ContextMenuStrip1.SourceControl

    Clipboard

     

     

    .SetImage(rClickedPBoxCopy.Image)

    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

    miércoles, 23 de marzo de 2011 18:00
  • Gracias Walter por responder, tu codigo funciona ok , pero quiero que tambien pegue cualquier imagen que este en en portapapeles (de otra aplicacion)
    miércoles, 23 de marzo de 2011 22:13
  • Lo intente desde el explorador y desde acdsee y lo unico que hace es poner el backcolor del picturebox al color del form.
    jueves, 24 de marzo de 2011 13:42
  • Si utilizo el Paint y copio la imagen, entonces si funciona. Como se puede modificar el codigo para que acepte copiar y pegar desde el explorador (u otro programa)?
    jueves, 24 de marzo de 2011 17:00
  • 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
    jueves, 24 de marzo de 2011 17:56
  • Muchas gracias por tu ayuda, me habia quedado trancado en esa parte.
    viernes, 25 de marzo de 2011 2:04