ListViews e 36 utilidades directas
Introdução
As ListView
são poderosos componentes de apresentação que devidamente aproveitados ostentam potencial para ir de encontro às necessidades práticas e estéticas de cada aplicação. É um componente bastante completo, bastante flexível e surpreendentemente fácil de trabalhar.
Como na matemática, o melhor método para a aprendizagem chama-se prática, e a melhor maneira de praticar é cobrir todas as funcionalidades básicas em forma de exemplos que se possam aplicar instantaneamente.
As ListView
possuem uma propriedade de nome View
, que nos indica o tipo de vista com que estamos a trabalhar. Estas vistas são:
Vista | Descrição |
---|---|
LargeIcon |
Ou ícones grandes. Apresenta os items acompanhados de imagens. |
SmallIcon |
Ou ícones pequenos. Apresenta os items acompanhados de pequenas imagens. |
Details |
Lista de items com detalhes, ou sub-items. Semelhante a uma grelha. |
List |
Ou lista. Apresenta os items como uma lista comum. |
Tile |
Ou em mosaico. Semelhante a LargeIcon . |
Com isto, e deduzindo que se tenham algumas bases em relação à sintaxe do Visual Basic 2008, listam-se abaixo 36 utilidades que se podem aplicar directamente a uma ListView
ou aos items de uma ListView
.
Importante: Todas as utilidades são aplicadas a uma listview de nome "LV" e algumas das utilidades necessitam de pré-requisitos ou não são compatíveis com todos os modos de vista da ListView
. Estas indicações são fornecidas.
1 - Adicionar colunas
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: Nenhuns
Dim C1 As New ColumnHeader
Dim C2 As New ColumnHeader
Dim C3 As New ColumnHeader
C1.Name = "Nome"
C1.Text = "Nome"
C2.Name = "Idd"
C2.Text = "Idade"
C3.Name = "Mrd"
C3.Text = "Morada"
LV.Columns.Add(C1)
LV.Columns.Add(C2)
LV.Columns.Add(C3)
2 - Remover colunas
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #1
LV.Columns.RemoveByKey("Mrd")
Nota: Também é possível remover com referência (Remove) ou por índice (RemoveAt)
3 - Alterar colunas
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #1
LV.Columns("Nome").Text = "Noooome"
Nota: Também é possível alterar a largura da coluna (Width).
Nota: Também é possível alterar com referência ou por índice.
4 - Adicionar itens
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: Nenhuns
Dim LVI As New ListViewItem
Dim SLVI1 As New ListViewItem.ListViewSubItem
Dim SLVI2 As New ListViewItem.ListViewSubItem
LVI.Name = "Nome"
LVI.Text = "João"
SLVI1.Name = "Idade"
SLVI1.Text = "20"
SLVI2.Name = "Morada"
SLVI2.Text = "Rua da Pantera"
LVI.SubItems.Add(SLVI1)
LVI.SubItems.Add(SLVI2)
LV.Items.Add(LVI)
Ideia: Pode-se e deve-se usar a propriedade Tag
, por item, para armazenar qualquer informação adicional importante.
Importante: Também é possível adicionar sem chave (LV.Items.Add
) mas perde-se bastante capacidade de futura referência, degradando a facilidade de manutenção.
Aviso: SubItems
são apenas compatíveis com a vista Details
.
Aviso: Na vista Details
, se não existirem colunas os itens não aparecem.
5 - Referenciar o valor de uma coluna, num item seleccionado
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #1,#4, 1 item seleccionado
MsgBox(LV.SelectedItems(0).SubItems("Idade").Text)
Nota: Também é possível referenciar com índice.
6 - Referenciar o valor de uma coluna, em todos os itens seleccionados
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #1,#4,#26, Seleccionar itens
For Each Item As ListViewItem In LV.SelectedItems
MsgBox(Item.SubItems("Idade").Text)
Next
7 - Referenciar o valor de uma coluna, em todos os itens da lista
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #1,#4
For Each I As ListViewItem In LV.Items
MsgBox(I.SubItems("Idade").Text)
Next
8 - Remover todos os itens
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4
LV.Items.Clear()
9 - Remover todos os itens e colunas
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #1,#4
LV.Clear()
10 - Remover o item seleccionado
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4, 1 item seleccionado
LV.SelectedItems(0).Remove()
11 - Remover itens por chave
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4
LV.Items.RemoveByKey("Nome")
12 - Remover itens por índice
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4
LV.Items(0).Remove()
13 - Remover todos os itens seleccionados
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4,#26, Seleccionar itens
For Each LVI As ListViewItem In LV.SelectedItems
LVI.Remove()
Next
14 - Colorir todos os itens
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4
For Each LVI As ListViewItem In LV.Items
LVI.UseItemStyleForSubItems = True
LVI.BackColor = Color.Bisque
LVI.ForeColor = Color.Red
Next
Nota: BackColor
altera a cor de fundo e ForeColor
altera a cor da fonte.
Nota: Também é possível efectuar colorização através de referência ou índice.
15 - Colorir itens pares
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4
For i As Integer = 0 To LV.Items.Count Step 2
If i >= LV.Items.Count Then Exit For
LV.Items(i).UseItemStyleForSubItems = True
LV.Items(i).BackColor = Color.BlueViolet
LV.Items(i).ForeColor = Color.White
Next
Nota: BackColor
altera a cor de fundo e ForeColor
altera a cor da fonte.
16 - Colorir itens ímpares
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4
For i As Integer = 1 To LV.Items.Count Step 2
If i >= LV.Items.Count Then Exit For
LV.Items(i).UseItemStyleForSubItems = True
LV.Items(i).BackColor = Color.BlueViolet
LV.Items(i).ForeColor = Color.White
Next
Nota: BackColor
altera a cor de fundo e ForeColor
altera a cor da fonte.
17 - Atribuír um ícone a um item seleccionado
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4, 1 item seleccionado
Dim IL As New ImageList
Dim B As Bitmap = New Bitmap(Me.Icon.ToBitmap)
IL.Images.Add("Icone1", B)
LV.SmallImageList = IL
LV.SelectedItems(0).ImageKey = "Icone1"
Importante: Para a vista LargeIcon
, a propriedade é LV.LargeImageList
e não SmallImageList
.
Nota: É aceite qualquer tipo de imagem suportada.
18 - Atribuír imagens de estado
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4
Dim IL As New ImageList
Dim B As Bitmap = New Bitmap(Me.Icon.ToBitmap)
Dim B2 As Bitmap = New Bitmap(16, 16)
Dim g As Graphics = Graphics.FromImage(B2)
g.Clear(Color.Red)
IL.Images.Add("Icone1", B)
IL.Images.Add("Icone2", B2)
LV.CheckBoxes = True
LV.StateImageList = IL
Nota: É aceite qualquer tipo de imagem suportada por uma ImageList
.
19 - Adicionar CheckBoxes a cada item
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4
LV.StateImageList = Nothing
LV.CheckBoxes = True
20 - Verificar estado da CheckBox de um item seleccionado
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4,#18 ou #19, 1 item seleccionado
MsgBox(LV.SelectedItems(0).Checked.ToString)
Nota: Também é possível efectuar esta verificação através de referência ou índice.
21 - Ordenar itens alfabéticamente
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4
If LV.Sorting = SortOrder.Descending Then
LV.Sorting = SortOrder.Ascending
Else
LV.Sorting = SortOrder.Descending
End If
LV.Sort()
22 - Adicionar grupos
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: Nenhuns
LV.ShowGroups = True
Dim GA As New ListViewGroup
GA.Header = "Grupo A"
GA.HeaderAlignment = HorizontalAlignment.Center
GA.Name = "A"
Dim GB As New ListViewGroup
GB.Header = "Grupo B"
GB.HeaderAlignment = HorizontalAlignment.Center
GB.Name = "B"
LV.Groups.Add(GA)
LV.Groups.Add(GB)
Importante: A vista List
não apresenta grupos, mas suporta-os internamente.
23 - Atribuír o item seleccionado a um grupo
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4,#22, 1 item seleccionado
LV.SelectedItems(0).Group = LV.Groups("A")
Nota: Também é possível efectuar atribuições através de referência ou índice.
24 - Distribuír todos os itens por grupos
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4,#22
Dim Grupo As String = "A"
For Each LVI As ListViewItem In LV.Items
LVI.Group = LV.Groups(Grupo)
If Grupo = "A" Then
Grupo = "B"
Else
Grupo = "A"
End If
Next
25 - Desassociar o item seleccionado de um grupo
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4,#22,#23, 1 item seleccionado
LV.SelectedItems(0).Group = Nothing
Nota: Também é possível efectuar desassociações através de referência ou índice.
26 - Permitir multiselecção de itens
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: Nenhuns
LV.MultiSelect = True
27 - Possibilitar a selecção de uma linha inteira
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: Nenhuns
LV.FullRowSelect = True
28 - Permitir edição de um item na lista
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: Nenhuns
LV.LabelEdit = True
29 - Activar linhas de grelha
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: Nenhuns
LV.GridLines = True
Aviso: Se existirem grupos e estiverem visíveis, as linhas de grelha não aparecem.
30 - Evitar perda de selecção na perda de foco
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: Nenhuns
LV.HideSelection = False
31 - Seleccionar itens com passagem do rato
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: Nenhuns
LV.HoverSelection = True
32 - Apresentar grupos
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: Nenhuns
LV.ShowGroups = True
33 - Definir o tamanho dos tiles
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: Nenhuns
LV.TileSize = New Drawing.Size(100, 100)
34 - Adicionar uma ToolTip no item seleccionado
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4, 1 item seleccionado
LV.ShowItemToolTips = True
LV.SelectedItems(0).ToolTipText = "A vida é bela"
Nota: Também é possível aplicar ToolTips através de referência ou índice.
35 - Subir um item
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4
Dim NewIndex As Integer = LV.SelectedItems(0).Index - 1
If NewIndex < 0 Then Exit Sub
Dim TempLVI As ListViewItem = LV.SelectedItems(0)
Dim LVI As New ListViewItem
LVI.Name = TempLVI.Name
LVI.Text = TempLVI.Text
LV.Items.Insert(NewIndex, LVI)
TempLVI.Remove()
LV.Items(NewIndex).Selected = True
Aviso: Este método genérico serve apenas para demonstrar o conceito e não move SubItens
de Itens
.
36 - Descer um item
Compatibilidade: LargeIcon | SmallIcon | Details | List | Tile
Pré-requisitos: #4
Dim NewIndex As Integer = LV.SelectedItems(0).Index + 1
If NewIndex > LV.Items.Count - 1 Then Exit Sub
Dim TempLVI As ListViewItem = LV.SelectedItems(0)
Dim LVI As New ListViewItem
LVI.Name = TempLVI.Name
LVI.Text = TempLVI.Text
LV.Items.Insert(NewIndex + 1, LVI)
TempLVI.Remove()
LV.Items(NewIndex).Selected = True
Aviso: Este método genérico serve apenas para demonstrar o conceito e não move SubItens
de Itens
.
Conclusão
Com a análise e conjugação destas 36 utilidades, mesmo que algumas sejam apenas afectação de uma propriedade, consegue-se atingir a maioria dos aspectos mais utilizados em aplicações existentes. Existe um sem fim de configuração, personalização e atalhos que só a experiência consegue trazer. As 36 utilidades são genéricas e podem ser facilmente alteradas. São portanto uma boa base para o domínio das ListView
.