• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

PJM

Drag/Drop [Resolvido]

7 mensagens neste tópico

Pessoal tenho a seguinte dúvida, como usar o drag/drop no VB 2008 .net?

Estou a tentar arrastar um ficheiro para uma caixa de texto, com a finalidade de mostrar a localização do ficheiro, por exemplo: "C:\a.txt".

No VB 6 era só activar a opção drag/drop para automatic (salvo a erro), agora no VB 2008 .net não faço a mínima ideia onde é. Encontrei uma propriedade AllowDrop e activei a, mas mesmo assim não me deixa arrastar lá o ficheiro.

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim deu, muito obrigado.

Agora só não percebi nada do código, será que alguém mo podia explicar se faz favor?

É que eu só me contento quando tenho as coisas feitas por mim, isto é, entendidas e não copiadas.

Aqui está o código:

Private Sub ListBox1_DragEnter( _
    ByVal sender As Object, ByVal e As DragEventArgs) _
    Handles ListBox1.DragEnter

    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        e.Effect = DragDropEffects.All
    End If
End Sub

Private Sub ListBox1_DragDrop( _
    ByVal sender As Object, ByVal e As DragEventArgs) _
    Handles ListBox1.DragDrop
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        Dim MyFiles() As String
        Dim i As Integer

        'Isto irá adicionar o tamanho de ficheiros que foram arrastados, armazenando os valores num array
        MyFiles = e.Data.GetData(DataFormats.FileDrop)
        ' Ciclo for em que irá adicionar todos os ficheiros arrastados pelo utilizador
        For i = 0 To MyFiles.Length - 1
            ListBox1.Items.Add(MyFiles(i))
        Next
    End If
End Sub

P.s.-> Comentei o que sabia

Cumprimentos e obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

'Despoletado quando o drag entra na listbox
Private Sub ListBox1_DragEnter( _
    ByVal sender As Object, ByVal e As DragEventArgs) _
    Handles ListBox1.DragEnter
´detecta se o tipo de dados que estas a arrastar e do tipo file
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
'Define o efeito para o cursor
        e.Effect = DragDropEffects.All
    End If
End Sub
´Codigo quando largas
Private Sub ListBox1_DragDrop( _
    ByVal sender As Object, ByVal e As DragEventArgs) _
    Handles ListBox1.DragDrop
'testa mais uma vez se o que estás a fazer é arrastar ficheiro
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then
        Dim MyFiles() As String
        Dim i As Integer

        'Isto irá adicionar o tamanho de ficheiros que foram arrastados, armazenando os valores num array
[b]'Isto irá adicionar as path's dos ficheiros  num array[/b]
'vai fazer um ciclo porque pode estar a arrastar mais que um
        MyFiles = e.Data.GetData(DataFormats.FileDrop)
        ' Ciclo for em que irá adicionar todos os ficheiros arrastados pelo utilizador
        For i = 0 To MyFiles.Length - 1
'Adiciona à lista
            ListBox1.Items.Add(MyFiles(i))
        Next
    End If
End Sub

espero que tenhas ficado esclarecido ;-)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim percebi, muito obrigado.

Porém tenho 2 dúvidas.

1º-> Como é que posso fazer isso só para um ficheiro? Tentei remover o array e continuar com o array mas meter logo com o valor 0. Por Exemplo: Myfiles(0) e não deu em nada.

2º-> 'Define o efeito para o cursor ? Que efeito? Não percebi bem esta linha de código.

Desculpa lá tantas perguntas, mas é que eu sou mesmo assim, gosto de saber o que estou fazer  :)

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Respondendo as tuas questoes...

para a primeira:

    Private Sub ListBox3_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox3.DragDrop
        If e.Data.GetDataPresent(DataFormats.FileDrop) Then
            Dim MyFiles() As String
            Dim i As Integer
            ' Assign the files to an array.
            MyFiles = e.Data.GetData(DataFormats.FileDrop)
            MsgBox(MyFiles(0).ToString)
            ' Loop through the array and add the files to the list.
            'For i = 0 To MyFiles.Length - 1
            'ListBox3.Items.Add(MyFiles(i))
            ' Next
        End If
    End Sub

A única coisa que podes fazer é eliminar o ciclo pelo array de ficheiros...

Podes aceder ao indice especifico...eu por exemplo pu-lo a dar uma msgbox com o nome do ficheiro.

Quanto à segunda:

Define o efeito para o ponteiro do rato (falhei aqui).

Podes ter 4 ou 5 efeitos diferentes... mover, copiar, rrastar, linkar...e por ai fora...depedendo do que faz o drop

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ahhh ok.

Então só me faltava era de facto o .ToString .

Obrigado pela ajuda  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora