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

Dotinho

Drag e Drop em form ou listview

14 mensagens neste tópico

Boas, alguem ja usou drag e drop numa form u numa listview? ja vi os exemplos que vem  no vs, mas nao percebi muito bem..

Alem disso ja fiz allowdrop=true na form e na listview e nada deu..

Alguma sugestão?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

AllowDrop = True é meio caminho andado.

Vou escrever um artigo hoje para a Wiki acerca dos Drag e Drops.

Aviso-te aqui quando estiver pronto, pode ser?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sem duvia informação muito boa =) 5 *

um mimo aqui para o pessoal...

===MOD===

Apesar do mimo ter sido fixe, eu é que nao sou muito inteligente..

Fiz tudo direito, mas.. posto aqui o codigo:

MsgBox(e.Data.GetData(DataFormats.Text, False))
        MsgBox(e.Data.GetData("String"))

mas quando arrasto um ficheiro ou pasta, a msgbox, está sempre em branco.. e nem sempre responde bem, nao sei porque..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já descobri como é..

é assim:

Dim d() As String = e.Data.GetData("FileDrop")

e funciona muito bem...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Usa antes o DataFormats, como está no artigo:

e.Data.GetData(DataFormats.Text)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema é que não da, da-me erro..mas tambem há o DataFormats.FileDop, que é o que devia ter usado..

A quesão é que com estes erros, pedi todas as formas permitidas em e.Data.GetFormats, e alguns nao veem no DataFormats. Foi a razão de eu ter escrito "FileDrop" em vez do DataFormats.FileDrop.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este post é muito útil mas detectei um problema.

Se eu escrever algo na textbox e depois quiser seleccionar todo o texto com o rato, o programa encrava e só matando o processo é que se resolve. Eu sei que não necessito de seleccionar o texto para o arrastar mas como prevenir este comportamento?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que o mais fácil é não usares a textbox para iniciar o drag.

Uso no exemplo para mostrar a funcionalidade.

Mas talvez haja uma volta que se possa dar, assim de repente não estou a ver.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que o mais fácil é não usares a textbox para iniciar o drag.

Uso no exemplo para mostrar a funcionalidade.

Mas talvez haja uma volta que se possa dar, assim de repente não estou a ver.

Pois, eu por acaso vou fazer drag and drop entre listviews portanto não devo ter esse problema.

Obrigado pelo excelente exemplo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho só uma dúvida.

Nesta linha de código:

    Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown
        TextBox1.DoDragDrop(TextBox1.Text, DragDropEffects.Copy)
    End Sub

Em vez do textbox eu tenho uma listview com duas colunas que quero arrastar para outra listview que também tem duas colunas. Como é que faço?

E nesta parte o que tenho de mudar?

Private Sub ListView1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView1.DragDrop
        Dim lvi As New ListViewItem
        lvi.Text = e.Data.GetData(DataFormats.Text).ToString
        lvi.SubItems.Add("DragDrop")
        ListView1.Items.Add(lvi)
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para evitar chatices com conversões, e já duvidando um bocado da possibilidade de converter de um IDataObject para um ListViewItem, eu enviava uma string com o texto dos items e subitems delimitados por um caractere, ou sequência de caracteres, que me permitisse o parsing quando se faz o drop, para re-assemblar o item.

Desta forma, basta passares texto, como o exemplo mostra.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para evitar chatices com conversões, e já duvidando um bocado da possibilidade de converter de um IDataObject para um ListViewItem, eu enviava uma string com o texto dos items e subitems delimitados por um caractere, ou sequência de caracteres, que me permitisse o parsing quando se faz o drop, para re-assemblar o item.

Desta forma, basta passares texto, como o exemplo mostra.

Fiz como disseste. É uma boa solução visto que tenho apenas duas colunas nas listviews. É pacífico fazer dessa forma.

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, desculpem voltar a este tópico mas tenho um problema.

Já consegui implementar o drag and drop de uma listview2 para outra listview1 mas gostava que desse para fazer o mesmo da listview1 para a listview2. Seguindo o exemplo da wiki, se eu acrescentar isto:

Private Sub ListView2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView2.DragDrop
    Dim lvi As New ListViewItem
    lvi.Text = e.Data.GetData(DataFormats.Text).ToString
    lvi.SubItems.Add("DragDrop")
    ListView2.Items.Add(lvi)
End Sub

obtenho o seguinte erro:

O 'Private Sub ListView2_DragDrop(sender As Object, e As System.Windows.Forms.DragEventArgs)' tem várias definições com assinaturas idênticas. (BC30269)

(peço desculpar por estar em português). Não entendo que erro é este. Não era suposto eu poder fazer o drag and drop nos dois sentidos? Que erro é este?

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