Newsgroup: it.comp.lang.visual-basic
Titolo: [? .NET] Spostamento di una immagine

cerco di spiegare il mio problema:
ho un certo numero di controlli picturebox,
vorrei realizzare una routine che mi permette di invertire il contenuto di
due picturebox attraverso una semplice operazione di trascinamento di una
sull'altra.
ho provato a gestire gli eventi mousedown, mouseup, mouseenter e mouseleave
ma ho rilevato un problema interressante: se faccio mousedown su una
picturebox, poi mi sposto su di un'altra e faccio mouseup, si genera prima
l'evento mouseup che l'evento mouseenter della seconda picturebox. è
normale? che eventi devo gestire?
spero di essere stato sufficientemente chiaro.
grazie a tutti.

 che eventi devo gestire?
provare a vedere qualcosa relativamente al drag'n'drop?
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 normale? che eventi devo gestire?
Devi abilitare la poprietà AllowDrop
Di seguito del codice copiato da qualche parte.
Aggiunge ad una windows form due picturebox
di nomi picLeft e picRight
alla picLeft aggiungi una Image
Copia e incolla il seguente codice,
non ho avuto il tempo di studiarlo, ma funziona.
Poi prova sia il trascinamento e la copia dell'immagine:
Const CtrlMask As Byte = 8
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Load
        picLeft.AllowDrop = True
        picRight.AllowDrop = True
    End Sub
    ' Handles the MouseDown event for both PictureBox controls. This event
fires 
    ' when the mouse is in the control's bounds and the mouse button is 
    ' clicked.
    Private Sub PictureBox_MouseDown(ByVal sender As System.Object, ByVal
e As System.Windows.Forms.MouseEventArgs) Handles picLeft.MouseDown,
picRight.MouseDown
        If e.Button = MouseButtons.Left Then
            Dim pic As PictureBox = CType(sender, PictureBox)
            'invoke the drag and drop operation
            If Not pic.Image Is Nothing Then
                pic.DoDragDrop(pic.Image, DragDropEffects.Move Or
DragDropEffects.Copy)
            End If
        End If
    End Sub
    ' Handles the DragEnter event for both PictureBox controls. DragEnter
is the
    ' event that fires when an object is dragged into the control's bounds.
    Private Sub PictureBox_DragEnter(ByVal sender As System.Object, ByVal
e As System.Windows.Forms.DragEventArgs) Handles picLeft.DragEnter,
picRight.DragEnter
        ' Check to be sure that the drag content is the correct type for
this 
        ' control. If not, reject the drop.
        If (e.Data.GetDataPresent(DataFormats.Bitmap)) Then
            ' If the Ctrl key was pressed during the drag operation then
perform
            ' a Copy. If not, perform a Move.
            If (e.KeyState And CtrlMask) = CtrlMask Then
                e.Effect = DragDropEffects.Copy
            Else
                e.Effect = DragDropEffects.Move
            End If
        Else
            e.Effect = DragDropEffects.None
        End If
    End Sub
    ' Handles the DragDrop event for both PictureBox controls. One handler
can be 
    ' used for both PictureBox controls by casting the sender and then
checking the
    ' Name property to determine which control should remove the image.
    Private Sub PictureBox_DragDrop(ByVal sender As System.Object, ByVal e
As System.Windows.Forms.DragEventArgs) Handles picLeft.DragDrop,
picRight.DragDrop
        Dim pic As PictureBox = CType(sender, PictureBox)
        pic.Image = CType(e.Data.GetData(DataFormats.Bitmap), Bitmap)
        ' Cause the image in the other PictureBox (that is, the PictureBox
that was
        ' not the sender in the DragDrop event) to be removed if the Ctrl
key was
        ' not pressed.
        If (e.KeyState And CtrlMask) <> CtrlMask Then
            If pic.Name = "picLeft" Then
                picRight.Image = Nothing
            Else
                picLeft.Image = Nothing
            End If
        End If
    End Sub
Ave
giuseppeD
---
CCR
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it