O controle ListView não dá suporte funcionalidade arrastar-e-soltar para itens em tempo de execução

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 822483
Sintomas
Se você adicionar itens para o controle ListView em um formulário do Microsoft Windows, você não pode reordenar os itens arrastando os itens no controle ListView em tempo de execução.
Causa
Esse problema ocorre porque o controle ListView não dá suporte funcionalidade arrastar-e-soltar para os itens em tempo de execução.
Como Contornar
Para contornar esse problema, fornecem funcionalidade de arrastar-e-soltar para o controle ListView da seguinte maneira:
  1. Adicione o seguinte código ao manipulador de eventos ListView1_ItemDrag .

    Microsoft Visual Basic .NET ou código do Microsoft Visual Basic 2005
     'Begins a drag-and-drop operation in the ListView control.ListView1.DoDragDrop(ListView1.SelectedItems, DragDropEffects.Move)
    Microsoft Visual translation from VPE for Csharp .NET ou Microsoft Visual translation from VPE for Csharp 2005 código
    //Begins a drag-and-drop operation in the ListView control.listView1.DoDragDrop(listView1.SelectedItems, DragDropEffects.Move);
  2. Adicione o seguinte código ao manipulador de eventos ListView1_DragEnter .

    Visual Basic .NET ou código do Visual Basic 2005
    Dim i As IntegerFor i = 0 To e.Data.GetFormats().Length - 1If e.Data.GetFormats()(i).Equals("System.Windows.Forms.ListView+SelectedListViewItemCollection") Then    'The data from the drag source is moved to the target.    e.Effect = DragDropEffects.MoveEnd IfNext
    translation from VPE for Csharp Visual .NET ou Visual translation from VPE for Csharp 2005 código
    int len=e.Data.GetFormats().Length-1 ;int i;for (i = 0 ; i<=len ;i++){    if (e.Data.GetFormats()[i].Equals("System.Windows.Forms.ListView+SelectedListViewItemCollection"))    {        //The data from the drag source is moved to the target.	        e.Effect = DragDropEffects.Move;    }}
  3. Adicione o seguinte código ao manipulador de eventos ListView1_DragDrop .

    Visual Basic .NET ou código do Visual Basic 2005
    'Return if the items are not selected in the ListView control.If ListView1.SelectedItems.Count = 0 Then Return'Returns the location of the mouse pointer in the ListView control.Dim p As Point = ListView1.PointToClient(New Point(e.X, e.Y))'Obtain the item that is located at the specified location of the mouse pointer.Dim dragToItem As ListViewItem = ListView1.GetItemAt(p.X, p.Y)If dragToItem Is Nothing Then Return'Obtain the index of the item at the mouse pointer.Dim dragIndex As Integer = dragToItem.IndexDim i As IntegerDim sel(ListView1.SelectedItems.Count) As ListViewItemFor i = 0 To ListView1.SelectedItems.Count - 1    sel(i) = ListView1.SelectedItems.Item(i)NextFor i = 0 To ListView1.SelectedItems.Count - 1    'Obtain the ListViewItem to be dragged to the target location.    Dim dragItem As ListViewItem = sel(i)    Dim itemIndex As Integer = dragIndex    If itemIndex = dragItem.Index Then Return    If dragItem.Index < itemIndex Then       itemIndex = itemIndex + 1    Else       itemIndex = dragIndex + i    End If    'Insert the item in the specified location.    Dim insertitem As ListViewItem = dragItem.Clone    ListView1.Items.Insert(itemIndex, insertitem)    'Removes the item from the initial location while     'the item is moved to the new location.    ListView1.Items.Remove(dragItem)Next
    translation from VPE for Csharp visual .NET ou Visual translation from VPE for Csharp 2005 código
    //Return if the items are not selected in the ListView control.if(listView1.SelectedItems.Count==0){   return;}//Returns the location of the mouse pointer in the ListView control.Point cp = listView1.PointToClient(new Point(e.X, e.Y));//Obtain the item that is located at the specified location of the mouse pointer.ListViewItem dragToItem = listView1.GetItemAt(cp.X, cp.Y);if(dragToItem==null){    return;} //Obtain the index of the item at the mouse pointer.int dragIndex = dragToItem.Index;ListViewItem[] sel=new ListViewItem [listView1.SelectedItems.Count];for(int i=0; i<=listView1.SelectedItems.Count-1;i++){     sel[i]=listView1.SelectedItems[i];}for(int i=0; i<sel.GetLength(0);i++){     //Obtain the ListViewItem to be dragged to the target location.    ListViewItem dragItem = sel[i];    int itemIndex = dragIndex;    if(itemIndex==dragItem.Index)   {        return;   }   if(dragItem.Index<itemIndex)       itemIndex++;  else       itemIndex=dragIndex+i;   //Insert the item at the mouse pointer.   ListViewItem insertItem = (ListViewItem)dragItem.Clone();   listView1.Items.Insert(itemIndex, insertItem);   //Removes the item from the initial location while    //the item is moved to the new location.   listView1.Items.Remove(dragItem);}
  4. No menu Build , clique em Build Solution .
  5. No menu Debug , clique em Iniciar .
Situação
Esse comportamento é por design.
Mais Informações

Passos para reproduzir o problema

  1. Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
  2. Crie um novo aplicativo do Windows usando o Visual Basic. NET, Visual Basic 2005, Visual translation from VPE for Csharp 2005 ou Visual translation from VPE for Csharp .NET.

    Por padrão, é criado o Form1.
  3. Adicione o controle ListView ao Form1.
  4. Clique com o botão direito do mouse ListView1 e, em seguida, clique em Propriedades .
  5. Na caixa de diálogo Propriedades , clique na propriedade itens e, em seguida, clique o botão de reticências (... ).
  6. No Editor de coleção ListViewItem diálogo caixa, clique quatro vezes em Adicionar .
  7. Defina a propriedade texto do primeiro controle ListViewItem para Item1 , defina a propriedade Text do segundo controle ListViewItem para Item2 , definir a propriedade Text de terceiro controle ListViewItem para Item3 e, em seguida, defina a propriedade Text do controle ListViewItem quarto como Item4 .
  8. No Editor de coleção ListViewItem diálogo caixa, clique em OK .
  9. Na caixa de diálogo Propriedades de ListView1 , defina a propriedade View à lista .
  10. Defina a propriedade AllowDrop ListView1 como True .
  11. No menu Build , clique em Build Solution .
  12. No menu Debug , clique em Iniciar .
  13. Tente arrastar Item1 para um novo local no controle ListView .

    Não é possível arrastar Item1 .
Referências
Para obter mais informações, visite os seguintes sites:Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
822482COMO: Fornecer funcionalidade de arrastar-e-soltar em aplicativos do Microsoft Windows usando o Microsoft Visual Basic .NET

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 822483 - Última Revisão: 11/26/2007 07:02:04 - Revisão: 2.9

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual C# 2005 Express Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

  • kbmt kbvs2005swept kbvs2005applies kbforms kbwindowsforms kblistview kbdragdrop kbctrl kbcontrol kbprb KB822483 KbMtpt
Comentários