none
Permitir arrastrar imagenes sobre un PictureBox RRS feed

  • Pregunta

  • Hola buenas noches, lo que necesito es que el PictureBox muestre la imagen que le arrastre sobre el he intentado con varias cosas pero siempre me muestra el mouse con el simbolito de denegado, no encuetro ninguna forma de que esa habilidad sea posible.
    .Net Framework 4.7.2
    Aplicacion de Windows Forms

     Public Class ddProperties
            Property img As Bitmap
            Property caller As Methods.MethodCaller
            Property index As Integer
        End Class
    
        Public Class Methods
            Public Delegate Sub MethodCaller(pbIndex As Integer)
    
            Public Shared Sub method1(pbIndex As Integer)
                MsgBox($"method1 called. Pic{pbIndex} method.")
                Dim frm As New Form1
                frm.ShowDialog()
            End Sub
    
        End Class
    
        Private MouseIsDown As Boolean = False
    
        Dim pos As Integer = 10
        Dim dropped As New List(Of ddProperties)
    
    
    
        Private Sub btnbuscar_MouseDown(sender As Object, e As MouseEventArgs) Handles btnbuscar.MouseDown
            If Not picfoto.Image Is Nothing Then
                ' Set a flag to show that the mouse is down.
                MouseIsDown = True
            End If
        End Sub
    
        Private Sub btnbuscar_MouseMove(sender As Object, e As MouseEventArgs) Handles btnbuscar.MouseMove
            If MouseIsDown Then
                ' Initiate dragging and allow either copy
                btnbuscar.DoDragDrop(New ddProperties With {.img = picfoto.Image, .index = 1, .caller = AddressOf Methods.method1}, DragDropEffects.Copy Or
                DragDropEffects.Move)
            End If
            MouseIsDown = False
        End Sub
    
        Private Sub btnbuscar_DragEnter(sender As Object, e As DragEventArgs) Handles btnbuscar.DragEnter
            If e.Data.GetDataPresent(GetType(ddProperties)) Then
                'Copia a imagem do picture box qndo clico e arrasto
                e.Effect = DragDropEffects.Copy
            End If
        End Sub
    
        Private Sub btnbuscar_DragDrop(sender As Object, e As DragEventArgs) Handles btnbuscar.DragDrop
            If e.Data.GetDataPresent(GetType(ddProperties)) Then
                'Size of picturebox inside the panel
                Dim u As New PictureBox
                u.Width = 100
                u.Height = 100
                u.BackColor = Color.BlueViolet
                u.Left = pos
                u.Top = 10
                pos += 120
    
                'Set the SizeMode to center the image.
                u.SizeMode = PictureBoxSizeMode.StretchImage
    
                Dim ddp As ddProperties = DirectCast(e.Data.GetData(GetType(ddProperties)), ddProperties)
                u.Image = ddp.img
    
                'Maybe an IF condition here, but how to know which picturebox was dragged?
    
                'Insert picture in the Panel
                picfoto.Controls.Add(u)
    
                dropped.Add(ddp)
            End If
            If dropped.Count = 3 Then
                For x As Integer = 0 To 2
                    dropped(x).caller.Invoke(dropped(x).index)
                Next
            End If
        End Sub
    
    End Class
    He intendo con esto y nada y otras formas pero ni siquiera permite la arrastrar ni texto el formulario, ayuda por favor.

    miércoles, 2 de octubre de 2019 4:17

Todas las respuestas

  • Aparentemente, según ese código, estás haciendo el "drop" sobre un botón, no sobre un PictureBox. Y además, el inicio del drag también es sobre el mismo botón ???

    Tal vez voy a decir algo obvio, pero ¿te has acordado de poner True en la propiedad AllowDrop del control sobre el que quieres hacer el "drop"? Y el evento DragDrop (y seguramente el DragEnter también) hay que dispararlo sobre el control de destino, no el de origen.

    • Propuesto como respuesta Pablo Rubio miércoles, 2 de octubre de 2019 14:52
    miércoles, 2 de octubre de 2019 6:08