Ferramentas de Utilizador

Ferramentas de Site


dev_net:vb.net:listviews_36_utilidades_directas

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:

VistaDescriçã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 VisualBasic 2008, listam-se abaixo 36 utilidades que se podem aplicar directamente a uma ListView ou aos items de uma ListView.

Todas as utilidades são aplicadas a uma listview de nome "LV" e algumas das utilidades necessitam de pré-requesitos 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")
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"
Também é possível alterar a largura da coluna (Width)
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)
Pode-se e deve-se usar a propriedade Tag, por item, para armazenar qualquer informação adicional 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
SubItems são apenas compatíveis com a vista Details
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)
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
BackColor altera a cor de fundo e ForeColor altera a cor da fonte
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
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
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"
Para a vista LargeIcon, a propriedade é LV.LargeImageList e não SmallImageList
É 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
É 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)
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)
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")
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
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
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"
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
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
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.

dev_net/vb.net/listviews_36_utilidades_directas.txt · Esta página foi modificada pela última vez em: 2015/01/31 19:38 por Rui Carlos