Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Se adicionar itens ao controlo ListView num formulário do Microsoft Windows, não é possível reordenar os itens arrastando os itens no controlo ListView em tempo de execução.
Para contornar este problema, fornecem funcionalidade de arrastar e largar para o controlo ListView da seguinte forma:
Adicione o seguinte código ao processador de eventos ListView1_ItemDrag .
código do Microsoft Visual Basic 2005 ou Microsoft Visual Basic .NET
'Begins a drag-and-drop operation in the ListView control.
ListView1.DoDragDrop(ListView1.SelectedItems, DragDropEffects.Move)
código do Microsoft Visual C# 2005 ou Microsoft Visual C# .NET
//Begins a drag-and-drop operation in the ListView control.
listView1.DoDragDrop(listView1.SelectedItems, DragDropEffects.Move);
Adicione o seguinte código ao processador de eventos ListView1_DragEnter .
código de Visual Basic 2005 ou do Visual Basic .NET
Dim i As Integer
For i = 0 To e.Data.GetFormats().Length - 1
If 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.Move
End If
Next
Visual C# .NET ou Visual C# 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;
}
}
Adicione o seguinte código ao processador de eventos ListView1_DragDrop .
código de Visual Basic 2005 ou do Visual Basic .NET
'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.Index
Dim i As Integer
Dim sel(ListView1.SelectedItems.Count) As ListViewItem
For i = 0 To ListView1.SelectedItems.Count - 1
sel(i) = ListView1.SelectedItems.Item(i)
Next
For 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
visual C# .NET ou Visual C# 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);
}
Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
Crie uma nova aplicação do Windows utilizando o Visual Basic. NET, Visual Basic 2005, Visual C# 2005 ou Visual C#. NET.
Por predefinição, é criado o Form1.
Adicione o controlo ListView ao Form1.
Clique com o botão direito do rato ListView1 e, em seguida, clique em Propriedades .
Na caixa de diálogo Propriedades , clique na propriedade itens e, em seguida, clique no botão reticências (... ).
No Editor de colecções de ListViewItem diálogo caixa, clique em Adicionar quatro vezes.
Defina a propriedade texto do primeiro controlo ListViewItem para Item1 , defina a propriedade Text do segundo controlo ListViewItem como Item2 , definir a propriedade de texto do controlo ListViewItem terceiro para Item3 e, em seguida, defina a propriedade Text do controlo ListViewItem quarto para Item4 .
No Editor de colecções de ListViewItem diálogo caixa, clique em OK .
Na caixa de diálogo Propriedades de ListView1 , defina a propriedade Ver a lista .
Defina a propriedade AllowDrop de ListView1 como true .
No menu criar , clique em criar soluções .
No menu Debug , clique em Iniciar .
A tentar arrastar Item1 para uma nova localização no controlo ListView .
Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
822482
(http://support.microsoft.com/kb/822482/
)
COMO: Fornecer funcionalidade arrastar e largar em aplicações do Microsoft Windows utilizando o Microsoft Visual Basic .NET
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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 822483
(http://support.microsoft.com/kb/822483/en-us/
)
Qual foi o esforço que despendeu pessoalmente para utilizar este artigo?
Muito baixo
Baixo
Moderado
Elevado
Muito elevado
Diga-nos porquê e o que podemos fazer para melhorar estas informações
Obrigado! Os seus comentários são utilizados para ajudar-nos a melhorar o conteúdo do nosso suporte. Para obter mais opções de assistência, visite a Home Page de Ajuda e Suporte.