Я видел, как это делается в среде Borland Turbo C ++ , но я не уверен, как это сделать для приложения на C #, над которым я работаю. Есть ли лучшие практики или ошибки, на которые стоит обратить внимание?
c#
winforms
drag-and-drop
Уве Кейм
источник
источник
Ответы:
Пример кода:
источник
io.File
(string[])
бросок для любогоFileDrop
отформатированного падения? То есть возможно ли сгенерировать объектFileDrop
, который вызовет исключение для недопустимого приведенияstring[]
? У меня проблемы с выяснением этого из документов .Помните о правах безопасности Windows Vista / Windows 7 - если вы используете Visual Studio от имени администратора, вы не сможете перетаскивать файлы из окна, не являющегося администратором, в вашу программу, когда вы запускаете ее из Visual Studio. Связанные с перетаскиванием события даже не сработают! Я надеюсь, что это помогает кому-то еще не тратить часы своей жизни ...
источник
В Windows Forms установите свойство элемента управления AllowDrop, затем прослушайте событие DragEnter и событие DragDrop.
Когда
DragEnter
событие срабатывает, установите аргумент вAllowedEffect
значение, отличное от none (напримерe.Effect = DragDropEffects.Move
).Когда
DragDrop
событие срабатывает, вы получите список строк. Каждая строка - это полный путь к удаляемому файлу.источник
Вы должны знать о гоче. Любой класс, который вы передаете как объект DataObject в операции перетаскивания, должен быть сериализуемым. Поэтому, если вы пытаетесь передать объект, и он не работает, убедитесь, что он может быть сериализован, так как это почти наверняка является проблемой. Это поймало меня пару раз!
источник
Еще одна ошибка:
Код платформы, который вызывает Drag-события, поглощает все исключения. Вы можете подумать, что код вашего события работает гладко, в то время как повсюду выделяются исключения. Вы не можете видеть их, потому что рамки крадут их.
Вот почему я всегда помещаю try / catch в эти обработчики событий, просто чтобы знать, генерируют ли они какие-либо исключения. Я обычно ставлю Debugger.Break (); в подвохе.
Перед выпуском, после тестирования, если кажется, что все работает, я удаляю или заменяю их реальной обработкой исключений.
источник
Другая распространенная ошибка - думать, что вы можете игнорировать события Form DragOver (или DragEnter). Я обычно использую событие DragOver формы, чтобы установить AllowedEffect, а затем событие DragDrop определенного элемента управления для обработки отброшенных данных.
источник
Вот кое-что, что я использовал для удаления файлов и / или папок, полных файлов. В моем случае я фильтровал
*.dwg
только файлы и решил включить все подпапки.fileList
являетсяIEnumerable
или аналогичным В моем случае был привязан к элементу управления WPF ...См. Https://stackoverflow.com/a/19954958/492 для подробностей этого трюка.
Обработчик капель ...
источник
Решение Judah Himango и Hans Passant доступно в Designer (в настоящее время я использую VS2015):
источник
Вы можете реализовать Drag & Drop в WinForms и WPF.
Вы должны добавить событие mousemove:
Вы должны добавить событие DragDrop:
private void YourElementControl_DragDrop (отправитель объекта, DragEventArgs e)
Исходный код с полным кодом .
источник