Visual Basic 6 - Usando o Controle Listview
Muitas vezes , ao desenvolver um projeto , a primeira preocupação é fazer a coisa funcionar , somente depois é que vamos tratar de dar uma melhorada na interface. O controle ListView é muito interessante para exibir dados em diversos formatos e dar uma aparência mais profissional á sua aplicação. Dê uma olhada no artigo - Usando ListView com ADO.
O controle ListView contém os objetos ListItem e ColumnHeader. O objeto ListItem define as características de um item , assim:
Podemos escolher quatro maneiras diferentes para nossos itens de dados em um controle ListView. Os itens podem ser arranjados em colunas com ou sem cabeçalhos de colunas e temos a opção de exibir os itens acompanhados de imagens e texto.
A lista de itens de dados é tratada pelo objeto ListItem nos seguintes formatos:
Large (standard) Icons
Small Icons
List
Report
- O controle ListView é encontrado no arquivo MSCOMCTL.OCX e para poder utilizá-lo no seu projeto você deve referenciar o componente - Microsoft Windows Commons Controls 6.0 (SP3 ou SP4) no seu projeto.
Exibindo itens em um controle Listview
Para poder exibir qualquer coisa em um controle Listview temos que primeiro incluir itens no controle. Como já dissemos acima o objeto ListItem é quem vai permitir tratar os itens em um controle ListView. Assim temos que:
Então o objeto ListItem pode conter imagens e texto , sendo que as imagens deve ser referências em um controle ImageList através das propriedades: Icons e SmallIcons.
Para poder exibir um item em um controle ListView criamos um objeto do tipo ListItem a seguir criamos o item. Assim, temos:
Exemplo 1:
Dim Item As ListItem
Set item = ListView1.ListItems.Add(,,"Item 1") Set item = ListView1.ListItems.Add(,,"Item 2") Set item = ListView1.ListItems.Add(,,"Item 3") |
|
Se você quiser associar uma imagem ao item deverá usar um Controle ImageList e vincular este controle ao controle ListView.
Após inserir as imagens que deseja usar no controle ImageList você deve indicar no controle ListView o nome do controle ImageList usado para fazer a vinculação:
Controle ImageList - Imagem a ser exibida no ListView | Controle ListView - Indicando o nome do Controle Imagelist |
Assim , após feita esta configuração basta alterar o código do Exemplo 1 para :
Exemplo 2:
Dim Item As ListItem
Set item = ListView1.ListItems.Add(,,"Item 1",1,1) Set item = ListView1.ListItems.Add(,,"Item 2",1,1) Set item = ListView1.ListItems.Add(,,"Item 3",1,1) |
|
Inclusão de três itens no ListView, relacionados com as imagens em ImagList: indices 1 para icones grandes e 1 p/pequenos |
Para alterar a visão dos dados basta alterar a propriedade View do Controle ListView, assim temos os seguintes formatos - Exemplo 3:
ListView1.View = lvwIcon | ListView1.View = lvwReport |
ListView1.View = lvwList | ListView1.View = lvwSmallIcon |
Inserindo Colunas e subitens
Para incluir colunas e cabeçalhos usamos o objeto ColumnHeader . Assim
Obs: O objeto ColumnHeader somente pode ser visualizado no formato Report ( View=Report) e pode ser inserido em tempo de projeto ou de execução.
Você pode usar o objeto ColumnHeader para:
Note que :
- Sempre existe uma coluna no Controle ListView : a coluna 1. Esta coluna contém os objetos ListItem atuais e não os seus subitens.
- A segunda coluna ( coluna 2) contém subitens
- Você sempre terá um objeto ColumnHeader a mais que subitens a propriedade Subitems do objetos ListItem começa em 1. As colunas então serão em quantidades ColumnHeaders.Count -1 .
- O número de objetos ColumnHeader determina o número de subitens que cada objeto ListItem pode ter. Quando você exclui um objeto ColumnHeader , todos os subitens associados a esta coluna serão excluídos.
Para incluir colunas você deve primeiro definir um objeto do tipo ColumnHeader e então usar o método Add para incluir os cabeçalhos com texto no controle ListView.
Para incluir um subitem usamos a propriedade Subitem com a seguinte sintaxe:
object.SubItems(index) [= string]
Onde:
Parte | Descrição |
object | Um objeto ListItem. |
index | Um inteiro que identifica um subitem para um ListItem específico. |
string | Texto que descreve o subitem. |
A seguir um exemplo de código onde incluímos um cabeçalho e subitens usando o mesmo ícone para todos os itens:
|
Trabalhando com Subitens
Para acessar e definir subitens primeiro temos que inserir colunas como fizemos nos exemplos anteriores. O acesso é feito na coleção Subitem de um ListItem. Quando você inclui um item o texto que você associa a ele irá aparecer na coluna com índice 0 ( Column(0) ). Então para inserir textos nas outras colunas precisamos apenas atribuir o texto a cada subitem.
Veja o exemplo abaixo, onde incluímos as colunas e depois definimos cada subitem para cada coluna com seu texto associado. (Usamos também um controle ImageList para associar a imagem exibida ao item)
Private Sub Command1_Click() Dim itmx As ListItem Dim colx As ColumnHeader 'Inclui algumas colunas Set colx = ListView1.ColumnHeaders.Add(, , "Nome") Set colx = ListView1.ColumnHeaders.Add(, , "Tipo") Set colx = ListView1.ColumnHeaders.Add(, , "Tam.") Set colx = ListView1.ColumnHeaders.Add(, , "Data") 'Inclui um item Set itmx = ListView1.ListItems.Add(, , "Aluno.exe", 1, 1) 'Aqui estamos acessando e definindo cada subitem itmx.SubItems(1) = "Arquivo" itmx.SubItems(2) = "15 KB" itmx.SubItems(3) = "01/04/2001" 'Define o formato de visao como Report ListView1.View = lvwReport End Sub |
O resultado do processamento é o seguinte:
Principais Eventos
Dentre os eventos do controle ListView dois você tem que conhecer: o evento ItemClick , o evento ItemCheck e o evento ColumnClick.
- ItemClick - é disparado quando um item é clicado e retorna o objeto ListItem que foi clicado , então você pode exibir o texto associado ao item , assim :
Private Sub ListView1_ItemClick(ByVal
Item As MSComctlLib.ListItem) MsgBox Item.Text End Sub |
- ItemChecked - É usado quando você define o controle para mostrar checkboxes ao lado de cada item. Para fazer isto via código fazemos:
ListView1.Checkboxes = True
Quando o usuário clicar, marcando ou desmarcando , um checkbox você vai usar o evento ItemCheck para fazer alguma ação , veja exemplo a seguir:
Private Sub ListView1_ItemCheck(ByVal
Item As MSComctlLib.ListItem) If Item.Checked Then MsgBox "Item marcado" Else MsgBox "Item desmarcado" End If End Sub |
- ColumnClick - Este evento ocorre quando um objeto ColumnHeader é clicado ; está disponível somente no formato de visão Report.
Você pode usar este evento associado as propriedades Sorted , SortKey e SortOrder para realizar uma ordenação pela coluna clicada. Veja exemplo a seguir:
Private Sub Form_Load() Dim itmx As ListItem Dim colx As ColumnHeader 'Inclui algumas colunas Set colx = ListView1.ColumnHeaders.Add(, , "Coluna 1") Set colx = ListView1.ColumnHeaders.Add(, , "Coluna 2") 'Inclui alguns itens Set itmx = ListView1.ListItems.Add(, , "ABC") itmx.SubItems(1) = "XYZ" Set itmx = ListView1.ListItems.Add(, , "XYZ") itmx.SubItems(1) = "ABC" 'Define o formato de visao como report ListView1.View = lvwReport End Sub |
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) 'Verifica se SortKey é a mesma que a atual If ListView1.SortKey <> ColumnHeader.Index - 1 Then 'Quando clicar em uma coluna define sortkey para indice -1 ListView1.SortKey = ColumnHeader.Index - 1 ListView1.SortOrder = lvwAscending Else 'Se a coluna ja esta selecionada entao altera a 'propr. SetOrder para ser o oposto da coluna em uso ListView1.SortOrder = IIf(ListView1.SortOrder = lvwAscending, lvwDescending, lvwAscending) End If 'Define a propriedade Sorted para utilizar a ordem atual ListView1.Sorted = True End Sub |
Cria e exibe um Lista com dois items e subitens | Realiza a ordenação dos itens conforme o usuário clicar na coluna1 |
Nota: Se Sorted=True os itens serão ordenados alfabeticamente de acordo com a propriedade SortOrder.
Aqui encerramos a primeira parte deste artigo. Veja a continuação em : Usando Listview II...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
.NET - Inversão de controle e Injeção de dependência para ...