Widziałem to zrobić w środowisku Borland Turbo C++, ale nie jestem pewien, jak to zrobić dla aplikacji C#, nad którą pracuję. Czy istnieją dobre praktyki lub gróźb, na które trzeba zwracać uwagę?Jak przeciągać i upuszczać pliki w aplikacji?
Odpowiedz
W Windows Forms, ustaw właściwość AllowDrop kontrolki, a następnie nasłuchuj zdarzenia DragEnter i DragDrop.
Po wywołaniu zdarzenia DragEnter
ustaw argument AllowedEffect
na coś innego niż brak (na przykład e.Effect = DragDropEffects.Move
).
Po uruchomieniu zdarzenia DragDrop
otrzymasz listę ciągów. Każdy ciąg jest pełną ścieżką do odrzucanego pliku.
Musisz być świadomy gotcha. Każda klasa, którą przechodzisz jako DataObject w operacji przeciągnij/upuść musi mieć możliwość Serializable. Jeśli więc spróbujesz przekazać obiekt i nie działa, upewnij się, że może być serializowany, ponieważ prawie na pewno jest to problem. To mnie zaskoczyło kilka razy!
Innym powszechnym problemem jest myślenie, że można zignorować zdarzenia Form DragOver (lub DragEnter). Zazwyczaj używam zdarzenia DragOver formularza, aby ustawić AllowedEffect, a następnie zdarzenie DragDrop określonej kontrolki, aby obsłużyć upuszczone dane.
Niektóre przykładowy kod:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.AllowDrop = true;
this.DragEnter += new DragEventHandler(Form1_DragEnter);
this.DragDrop += new DragEventHandler(Form1_DragDrop);
}
void Form1_DragEnter(object sender, DragEventArgs e) {
if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
}
void Form1_DragDrop(object sender, DragEventArgs e) {
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files) Console.WriteLine(file);
}
}
Nota prawna: może nie działać w debugowaniu, jeśli uruchamiasz program Visual Studio jako administrator w systemie Windows 7 lub jeśli uruchamiasz program jako administrator. Zobacz [tutaj] (http://stackoverflow.com/questions/2833709/c-sharp-drag-drop-does-not-work-on-windows-7) – Matthieu
Jak uzyskać zawartość plików? – Burnsys
@Burnsys, jeśli masz ścieżkę do pliku z operacji przeciągania, to możesz odczytać używając 'io.File' – Smith
Kolejny haczyka:
Kod ramy, które wywołuje przeciągnij zdarzenia połknąć wszystkie wyjątki. Możesz pomyśleć, że Twój kod zdarzeń działa sprawnie, podczas gdy w każdym miejscu pojawiają się wyjątki. Nie można ich zobaczyć, ponieważ kradną je ramy.
Dlatego zawsze próbowałem/haczyk w tych programach obsługi zdarzeń, więc wiem, czy rzucają jakieś wyjątki. Zwykle umieszczam Debugger.Break(); w części połowowej.
Przed zwolnieniem, po przetestowaniu, jeśli wszystko wydaje się zachowywać, usuwam je lub zastępuję rzeczywistą obsługą wyjątku.
Należy pamiętać o uprawnieniach zabezpieczeń Windows Vista/Windows 7 - w przypadku korzystania z programu Visual Studio jako administratora nie będzie można przeciągać plików z okna przeglądarki innego niż administrator do programu po uruchomieniu go z poziomu programu visual studio . Zdarzenia związane z przeciąganiem się nawet nie wystrzelą! Mam nadzieję, że pomoże to komuś innemu nie marnować godzin życia ...
@Wayne Uroda: Myślałem, że mój kod nie działa - heck to dawało mi duży "Brak symbolu" jak ten http://en.wikipedia.org/wiki/File:ProhibitionSign2.svg. Wtedy zobaczyłem tę odpowiedź i uruchomiłem VS jako nie-admin i presto to działa! Stukrotne dzięki. –
Nie mogę ci wystarczająco podziękować za to, zrezygnowałbym, chyba że znalazłem ten post! Jest tak samo ważny w systemie Windows 10 w 2017 roku, jak to było podczas pisania. – Culme
Oto coś, co kiedyś upuściłem pliki i/lub foldery pełne plików. W moim przypadku filtrowałem tylko pliki *.dwg
i wybrałem wszystkie podfoldery.
fileList
jest IEnumerable
lub podobne w moim przypadku był zobowiązany do kontroli WPF ...
var fileList = (IList)FileList.ItemsSource;
Zobacz https://stackoverflow.com/a/19954958/492 o szczegóły tej sztuczki.
Upadek obsługi ...
private void FileList_OnDrop(object sender, DragEventArgs e)
{
var dropped = ((string[])e.Data.GetData(DataFormats.FileDrop));
var files = dropped.ToList();
if (!files.Any())
return;
foreach (string drop in dropped)
if (Directory.Exists(drop))
files.AddRange(Directory.GetFiles(drop, "*.dwg", SearchOption.AllDirectories));
foreach (string file in files)
{
if (!fileList.Contains(file) && file.ToLower().EndsWith(".dwg"))
fileList.Add(file);
}
}
- 1. Jak przeciągać i upuszczać pliki do JTable?
- 2. Jak przeciągać i upuszczać z wieloma czynnościami?
- 3. Jak przeciągać i upuszczać wiersze DataGridView pod sobą?
- 4. Jak mogę przeciągać i upuszczać wiele widoków obrazu w porównaniu z innymi widokami obrazu Android
- 5. Jak przeciągać pliki z aplikacji C# winform do wiadomości programu Outlook
- 6. Czy można przeciągać i upuszczać niektóre treści między dwoma oknami przeglądarki przy użyciu JQuery lub innej metody?
- 7. Jak przeciągać i przewijać w div z jQuery
- 8. Nie można przeciągać i przenosić formularza WPF
- 9. Interfejs Jquery UI można sortować i przeciągać
- 10. Zrób UIView przeciągać palcem
- 11. Jak wyświetlić i edytować istniejące pliki PDF w aplikacji ios
- 12. przeciągać ikony do ekranu głównego
- 13. Jak utworzyć interaktywny (przeciągnij i upuść) GUI w języku C#
- 14. Pobierz i przechowuj pliki wewnątrz aplikacji elektronowej
- 15. Nie można przeciągać elementów w elemencie iframe
- 16. Jak rozmieścić pliki za pomocą aplikacji clickonce?
- 17. Pliki EXE aplikacji WPF i konsoli w tym samym rozwiązaniu
- 18. Jak upuszczać wiersze ze zbyt dużą liczbą wartości NULL?
- 19. JQuery przeciągać obraz z zapisanej pozycji
- 20. Jak zapobiegać zakłócaniu elementów potomnych przez dragi w formacie HTML5 i upuszczać zdarzenia?
- 21. Trwałe pliki cookie w aplikacji na iOS?
- 22. Czy pliki dzienników aplikacji i pliki danych użytkowników powinny być przechowywane w APPDATA lub PROGRAMDATA
- 23. Jak mogę edytować pliki PDF w aplikacji na iOS?
- 24. Jak mogę odtwarzać różne pliki wideo w aplikacji na Androida?
- 25. Jak mogę znaleźć pliki mojej aplikacji w folderze iPhone Simulator?
- 26. pliki konfiguracyjne dla aplikacji internetowej - ładuj raz i przechowuj gdzie?
- 27. Dodawanie składnika "przeciągnij i upuść" do aplikacji iOS
- 28. Jak uzyskać i ustawić pliki cookie w Zope i Plone?
- 29. Jak obsługiwać pliki javascript i css w witrynie?
- 30. Jak zapisywać obrazy i nagrane pliki w katalogu tymczasowym?
Czy oznacza przeciągnij i upuść w aplikacji C# lub do C# IDE ? – JamesSugrue
Z cource, aplikacja C#. Chce, aby jego aplikacja była przyjazna dla użytkownika. – SLA80
Więcej przydatnych odpowiedzi pod adresem [link] (http://helgeklein.com/blog/2010/03/how-to-enable-drag-and-drop-for-an-elevated-mfc-application-on-vistawindows-7 /). –