Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

drag and drop

Îåêßíçóå áðü ôï ìÝëïò roni7. Τελευταία δημοσίευση από το μέλος cap στις 29-05-2007, 17:35. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-12-2006, 17:51 21949

    drag and drop

    Καλησπερα. Το ερωτημα μου ειναι αν και πως μπορω να κανω drag and drop απο/σε ενα Treeview control. Φτιαχνω μιε εφαρμογη (Windows Application) με VB.NET 2005. Κανω drag ενα row απο ενα grid επιτυχως και θελω να κανω drop σε ενα φακελο ενος treeview. Το προβλημα μου ειναι οτι η εφαρμογη συμπεριφερεται σαν να μη δεχεται το treeview τη λειτουργια drop, δηλαδη σαν να εχω το allowdrop = false. Αν μπορει καποιος να με βοηθησει θα με σωσει. Ευχαριστω 

  •  10-12-2006, 11:20 21971 σε απάντηση της 21949

    Απ: drag and drop

    Το TreeView, όπως όλα τα controls, έχει ένα σύνολο από events με τα οποία ελέγχεις το drag and drop. Όταν έχεις θέσει AllowDrop=true, τότε δημιουργούνται αυτά τα events, αλλά πρέπει εσύ να τα χειριστείς για να ολοκληρώσεις τη λειτουργία του drag and drop.

    Τα δύο βασικά events που πρέπει να χειριστείς οπωσδήποτε είναι:

    DragEnter

    Προκαλείται την πρώτη φορά που το ποντίκι, κάνοντας drag, μπαίνει μέσα σε ένα control. Αυτό είναι το σημείο όπου θα ελέγξεις ποιο είναι το αντικείμενο που γίνεται drag, αν θα το δεχτείς, και ποιες λειτουργίες υποστηρίζεις. By default δεν υποστηρίζεται καμία λειτουργία.
    Αν θέλεις να επιτρέψεις μόνο την αντιγραφή, τότε στον κώδικά σου θα κάνεις
    private void treeView1_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = e.AllowedEffect  & DragDropEffects.Copy;
    }

    Το βασικό όμως είναι να ελέγξεις τι είναι αυτό που μπαίνει στον εναέριο χώρο του control σου, για να αποφασίσεις αν το αποδέχεσαι ή όχι. Για να το κάνεις αυτό ελέγχεις το e.Data. Αν μπορείς να δεχτείς ένα ορισμένο τύπο αντικειμένου, τότε μπορείς να χρησιμοποιήσεις την e.Data.IsDataPresent δίνοντας τον τύπο που θέλεις. Αν πάλι δεν είσαι τελείως σίγουρος για το τι μπορείς να δεχτείς, τότε μπορείς καλώντας την e.Data.GetFormats να δεις όλους τους τύπους που περιέχονται στο drag object και να αποφασίσεις.

    Ο παρακάτω κώδικας αποδέχεται ένα drop για copy αν περιέχει όνομα αρχείου:
    private void treeView1_DragEnter(object sender, DragEventArgs e)
    {
         if (e.Data.GetDataPresent("FileName"))
           e.Effect = e.AllowedEffect  & DragDropEffects.Copy;
    }

    Βέβαια μπορείς να κάνεις πιο προχωρημένους ελέγχους, π.χ. χρησιμοποιώντας τα e.X και e.Y για να δεις ποιος κόμβος του δέντρου είναι κάτω από το ποντίκι, αν κι αυτά ταιριάζουν καλύτερα στο event GiveFeedback.

    DragDrop

    Αυτό το event θα προκληθεί αν έχεις "αποδεχτεί" ένα drag operation και ο χρήστης αφήσει το κουμπί του ποντικιού πάνω από το control σου. Εκεί έχεις τις ίδιες πληροφορίες που είχες και στο DragEnter, οπότε για να πάρεις το αντικείμενο που "έπεσε" στο control σου χρησιμοποιείς την e.Data.GetData:
    private void treeView1_DragDrop(object sender, DragEventArgs e)
    {
         if (e.Data.GetDataPresent("FileName"))
         {
             string[] fileNames = (string[])e.Data.GetData("FileName");
             treeView1.Nodes.Add(fileNames[0]);
         }
    }


    Από ό,τι βλέπεις, το drag and drop δεν είναι πυρηνική φυσική, αλλά δεν είναι και απλό.


    Νατάσα Μανουσοπούλου
  •  29-05-2007, 17:35 32318 σε απάντηση της 21971

    Απ: drag and drop

    Ψάχνοντας στα παλιά posts για δημοσιεύσεις περί drag&drop έπεσα επάνω στην παρούσα. Μια και έπεσα λοιπον, να πω οτι βρήκα επίσης στο CodeProject ένα πολύ επεξηγηματικό άρθρο σχετικά με το drag&drop.

    Με την ευκαιρία, κλείνω και τη δημοσίευση :)

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems