terça-feira, 21 de setembro de 2010

DragDrop de arquivos em C#

Não pretendia fazer outro post tão cedo, mas lembrei disso e achei que poderia ser interessante.

Estive trabalhando em um software que envia um arquivo pela porta serial.
A princípio o arquivo deveria ser procurado entre as pastas do computador através de uma janela do Explorer e ao clicar em "Abrir" na janela de navegação o caminho do arquivo era copiado para uma TextBox na minha janela principal.
Eu decidi adicionar uma opção em que se possa arrastar e soltar o arquivo na janela e então recuperar o caminho para manipular o arquivo como desejado. Fiz isso utilizando os eventos de DragDrop já disponíveis em C#.

No caso estou trabalhando dentro da classe da minha janela principal, chamada Form1.cs e tenho uma TextBox chamada nomeArquivo.

A primeira coisa a fazer é modificar a propriedade AllowDrop da Form1 para true. Isso pode ser feito no modo Design.

A parte do código é bem simples.
É possivel recuperar o caminho do arquivo desejado na forma de um vetor de strings de forma muito simples. Se você soltar um grupo de arquivos você ficará com o caminho de cada arquivo em uma posição do vetor.

Exemplo: Eu usei o evento DragEnter para definir o efeito e DragDrop para recuperar o caminho do arquivo.

{
.
.
.
    private void Form1_DragEnter(object sender, DragEventArgs e)
    {
        if(e.Data.GetDataPresent(DataFormats.FileDrop))
            e.Effect = DragDropEffects.Copy;
    }

    private void Form1_DragDrop(object sender, DragEventArgs e)
    {

        string[] arquivos = (string[])e.Data.GetData(DataFormats.FileDrop);
        nomeArquivo.Text = arquivos.Last();
    }
.
.
.
}


No caso eu não tenho como carregar mais de um arquivo ao mesmo tempo, então eu decidi optar por pegar sempre o último arquivo do vetor (se colocar apenas um arquivo, ele é carregado; se forem vários, pega só o último do vetor). Mas só fiz isso porque realmente não me interessa, nessse caso, trabalhar com mais de um arquivo.

Até mais.

2 comentários:

Anônimo disse...

Muito bom!
obrigado, era exatamente o que estava procurando!

as vezes a gente quer algo simples, mas só encontramos coisas complexas e inúteis..
vlw mesmo!

_ivan disse...

Muito obrigado! :D