Μετακίνηση εικόνας με drag-and-drop
Στο παράδειγμα
παρακάτω, βλέπουμε ένα τυπικό δείγμα μετακίνησης μίας εικόνας από ένα
Picturebox σε ένα άλλο. Η λειτουργία dragging ενεργοποιείται στο Picturebox1 με
τη μέθοδο DoDragDrop, όταν πατηθεί το mouse (γεγονός MouseDown).
Εδώ, καθορίζουμε τα δεδομένα που θα αντιγραφούν στο Πρόχειρο (Image) και τις
επιτρεπτές λειτουργίες-AllowedEffect (μετακίνηση, αντιγραφή, σύνδεση
κλπ, μπορεί να είναι και συνδυασμός).
Στο
PictureBox2, όπου θα "πέσει" η εικόνα, μας ενδιαφέρουν δύο γεγονότα :
DragEnter και DragDrop. Το πρώτο, ενεργοποιείται όταν η
λειτουργία dragging εισέρχεται στο picturebox και συνήθως ελέγχουμε αν το
δεδομένο είναι εικόνα και τί λειτουργία (από τις επιτρεπτές μετακίνηση,
αντιγραφή, σύνδεση κλπ) θα εφαρμοστεί. Το δεύτερο, ενεργοποιείται όταν αφήνουμε
το κουμπί του ποντικιού και βάζουμε τα δεδομένα στο control.
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As
System.EventArgs)
Handles MyBase.Load
'Επέτρεψε Drop στο Picturebox2.
PicBox2.AllowDrop = True
End Sub
'--------------------------------------------------------
'Όταν πατηθεί το πλήκτρο του ποντικιού στο PictureBox1,
‘ξεκίνα το dragdrop.
Private Sub PicBox1_MouseDown(ByVal
sender As Object, _
ByVal e As
System.Windows.Forms.MouseEventArgs) _
Handles PicBox1.MouseDown
If Not PicBox1.Image Is Nothing Then
'Ξεκίνα το dragging.
‘Επιτρεπτή λειτουργία η μετακίνηση μόνο.
PicBox1.DoDragDrop(PicBox1.Image, DragDropEffects.Move)
End If
End Sub
'--------------------------------------------------------
'Οταν εισέρχεται στο
Picturebox2 σε διαδικασία drag'n drop
Private Sub PicBox2_DragEnter(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DragEventArgs)
_
Handles PicBox2.DragEnter
'Ελεγξε αν το
αντικείμενο e που κρατά τα δεδομένα του drag'n drop,
‘έχει εικόνα bitmap.
If e.Data.GetDataPresent(DataFormats.Bitmap) Then
e.Effect =
DragDropEffects.Move
Else
e.Effect =
DragDropEffects.None
End If
End Sub
'--------------------------------------------------------
'Οταν κάνει drop στο
Picturebox2 σε διαδικασία drag'n drop.
Private Sub PicBox2_DragDrop(ByVal
sender As Object,_
ByVal e As
System.Windows.Forms.DragEventArgs) _
Handles
PicBox2.DragDrop
'Πάρε την εικόνα από
το αντικείμενο e που κρατά
‘τα δεδομένα του drag'n drop.
PicBox2.Image =
e.Data.GetData(DataFormats.Bitmap)
'Καθάρισε την εικόνα
από το PictureBox1.
‘Αν θέλεις copy μην βάλεις αυτήν την εντολή.
PicBox1.Image = Nothing
End Sub
'--------------------------------------------------------
'Καθάρισε το
PicBox2.
Private Sub btnClear_Click(ByVal
sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnClear.Click
PicBox2.Image = Nothing
End Sub
'--------------------------------------------------------
'Φόρτωσε μία εικόνα στο PicBox1.
Private Sub btnLoadPicture_Click(ByVal
sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnLoadPicture.Click
Dim dlg As New OpenFileDialog()
dlg.Filter = "Bitmap *.bmp|*.bmp|JPEG
*.jpg|*.jpg|GIF *.gif|*.gif|PNG
*.png|*.png"
dlg.FilterIndex = 2
'O Images είναι υποφάκελος του bin, δηλ,
‘του τρέχοντος φακέλου της εφαρμογής.
dlg.InitialDirectory = "Images"
dlg.ShowDialog()
If dlg.FileName.Length > 0 Then
PicBox1.Image =
Image.FromFile(dlg.FileName)
End If
dlg.Dispose()
End Sub
'--------------------------------------------------------
Συνήθως, το drag-and-drop ξεκινάει από ένα γεγονός
MouseDown, αλλά αυτό δεν είναι υποχρεωτικό. Οποιοδήποτε άλλο γεγονός μπορεί να
ξεκινήσει τη λειτουργία αυτή.
·
Χρήστος
Μουρατίδης