Ir para o conteúdo
Dotinho

Drag e Drop em form ou listview

Mensagens Recomendadas

Dotinho    1
Dotinho

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ribeiro55    44
ribeiro55

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Dotinho    1
Dotinho

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..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Dotinho    1
Dotinho

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zephirus    0
zephirus

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ribeiro55    44
ribeiro55

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zephirus    0
zephirus

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zephirus    0
zephirus

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ribeiro55    44
ribeiro55

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zephirus    0
zephirus

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zephirus    0
zephirus

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?

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade