Eu já vi isso feito no ambiente Turbo C ++ da Borland , mas não sei como fazer isso para um aplicativo C # em que estou trabalhando. Existem boas práticas ou dicas a serem observadas?
c#
winforms
drag-and-drop
Uwe Keim
fonte
fonte
Respostas:
Algum código de exemplo:
fonte
io.File
(string[])
elenco é seguro para qualquerFileDrop
queda formatada? Ou seja, é possível gerar umFileDrop
que causará uma exceção de conversão ilegal parastring[]
? Estou tendo problemas para descobrir isso nos documentos .Esteja ciente dos direitos de segurança do Windows Vista / Windows 7 - se você estiver executando o Visual Studio como administrador, não poderá arrastar arquivos de uma janela do explorador não administrador para o seu programa quando executá-lo no Visual Studio. Os eventos relacionados ao arrasto nem serão disparados! Espero que isso ajude alguém por aí a não perder horas da vida ...
fonte
No Windows Forms, defina a propriedade AllowDrop do controle e ouça o evento DragEnter e o evento DragDrop.
Quando o
DragEnter
evento for disparado, defina o argumentoAllowedEffect
como algo diferente de nenhum (por exemploe.Effect = DragDropEffects.Move
).Quando o
DragDrop
evento for acionado, você obterá uma lista de strings. Cada sequência é o caminho completo para o arquivo que está sendo descartado.fonte
Você precisa estar ciente de uma pegadinha. Qualquer classe que você passar como DataObject na operação de arrastar / soltar deve ser serializável. Portanto, se você tentar passar um objeto, e ele não estiver funcionando, verifique se ele pode ser serializado, pois esse é quase certamente o problema. Isso me chamou a atenção algumas vezes!
fonte
Mais uma pegadinha:
O código da estrutura que chama os eventos Drag engolem todas as exceções. Você pode pensar que seu código de evento está funcionando sem problemas, enquanto jorra exceções por todo o lado. Você não pode vê-los porque a estrutura os rouba.
É por isso que sempre coloco try / catch nesses manipuladores de eventos, apenas para saber se eles lançam alguma exceção. Eu costumo colocar um Debugger.Break (); na parte de captura.
Antes do lançamento, após o teste, se tudo parecer se comportar, eu os removo ou substituo por um tratamento de exceção real.
fonte
Outro problema comum é pensar que você pode ignorar os eventos Form DragOver (ou DragEnter). Normalmente, uso o evento DragOver do formulário para definir o AllowedEffect e o evento DragDrop de um controle específico para manipular os dados descartados.
fonte
Aqui está algo que eu costumava soltar arquivos e / ou pastas cheias de arquivos. No meu caso, eu estava filtrando
*.dwg
apenas arquivos e optou por incluir todas as subpastas.fileList
é umIEnumerable
ou similar No meu caso estava vinculado a um controle WPF ...Consulte https://stackoverflow.com/a/19954958/492 para obter detalhes sobre esse truque.
O manipulador de soltar ...
fonte
A solução de Judah Himango e Hans Passant está disponível no Designer (atualmente estou usando o VS2015):
fonte
Você pode implementar o Drag & Drop no WinForms e WPF.
Você deve adicionar o evento mousemove:
Você deve adicionar o evento DragDrop:
private void YourElementControl_DragDrop (remetente do objeto, DragEventArgs e)
Fonte com código completo .
fonte