/ / Przeciągnij i upuść z ListView do Eksploratora [duplikuj] - c #, winformy, przeciągnij i upuść, wyświetlenie listy obiektów

Przeciągnij i upuść z ListView do Eksploratora [duplikat] - c #, winformy, przeciągnij i upuść, wyświetlenie listy obiektów

Moim celem jest możliwość przeciągnięcia elementu z plikuListView to Explorer. Sposób, w jaki próbuję to osiągnąć, jest nieco inny - od wyszukiwania w Google i na tej stronie, nie mogłem znaleźć niczego, co by mi pomogło, lub wystarczająco ściśle odpowiadało temu, co próbuję zrobić. niektóre z przykładów, ponieważ nie rozumiem wystarczająco dużo o tych operacjach przeciągania i upuszczania.

W szczególności kontrola, z której próbuję przeciągać elementy, to TreeListView z ObjectListView biblioteka. Kontrolka jest wypełniona węzłami reprezentującymi strukturę wewnątrz skompresowanego pliku archiwum. Wpisy są przetwarzane na dwa różne obiekty reprezentujące plik i katalog. Oba te modele dziedziczą interfejs. Podczas normalnego wyodrębniania tych plików używam a Form że ja stawiam instancję z kolekcją węzłów idocelowa ścieżka, którą zostaną wyodrębnione jako parametry. Następnie zajmuje się ekstrakcją. Jest tak, że mogę pokazać ogólny i pojedynczy postęp każdego pliku.

Subskrybowanie ItemDrag wydarzenie, wiem, że muszę zadzwonić DoDragDrop. Kiedy to robię, muszę mieć możliwość utworzenia formularza wyodrębniania dopiero po upuszczeniu (gdy użytkownik zwolni mysz) Explorer, a także być w stanie pobrać ścieżkę, w której elementy zostały przeciągnięte.

Z jakiegoś powodu wydaje się to o wiele bardziej skomplikowane, niż powinno być. Wszelkie porady i sugestie byłyby bardzo pomocne.

Odpowiedzi:

0 dla odpowiedzi № 1

Nie jestem pewien, jakiego formatu Explorer oczekuje w obiekcie przeciągania, ale ten proces może działać.

  • Po rozpoczęciu przeciągania należy wstępnie wyodrębnić wybrane pliki do niektórych temp informator
  • Utwórz obiekt DataObject, który zawiera ścieżki wyodrębnionych plików w formacie oczekiwanym przez Eksploratora
  • Użyj obiektu DataObject w wywołaniu DoDragDrop
  • Kiedy użytkownik upuści Explorer, pliki powinny zostać skopiowane z katalogu tymczasowego do miejsca docelowego upuszczenia
  • Śledź wszystkie wyodrębnione pliki i czyszczenie, gdy aplikacja istnieje (id pożądane)

Mam nadzieję że to pomoże.

Edytuj (po niektórych badaniach):

Wierzę, że jeśli używasz

new DataObject(DataFormats.FileDrop, files)

gdzie pliki są ciągami znaków [] plików, które mają być skopiowane (te, które umieściłeś w katalogu tymczasowym), musisz mieć poprawny obiekt DataObject do implementacji.

Haven nie miał okazji napisać jeszcze jednego prototypu do testowania.