Duvidas com autosiz...
 
Notifications
Clear all

Duvidas com autosize das colunas do Listview

6 Posts
2 Usuários
0 Reactions
2,542 Visualizações
(@fabioprade)
Posts: 273
Reputable Member
Topic starter
 

Senhores boa noite,

No meu projeto tenho varios forms de pesquisa que a rotina abaixo funciona muito bem, mas em um Userform com multipaginas, onde tenho dentro dele varias listview, da erro "ColumsHeaders" Metodo ou membro de dados nao encontrado.

Pode estar dando erro porque tenho varias listview dentro deste form???

Private Sub TamanhoColAutomatico()
Dim Column As Long
Dim Counter As Long
Counter = 0
For Column = Counter To lstLista.ColumnHeaders.Count - 2
SendMessage lstLista.hWnd, LVM_SETCOLUMNWIDTH, Column, LVSCW_AUTOSIZE_USEHEADER
Next
End Sub

 
Postado : 16/03/2012 7:09 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Fabio, como ja comentei no tópico anterior, conforme algumas pesquisas, não é aconselhavel utilizar alguns controles dentro de MultiPages e o ListView é um deles, não sei se haveria algum problema nesta questão do tamnho das colunas automáticas

Mas em um dos exemplos que anexou, veja que no evento inicializar do UserForm1 você colocou a linha :
lstLista.ColumnWidths = "0,8 cm;2,1 cm;3 cm ;1,6 cm ;6,5 cm"
ou seja, já definiu os tamahos das colunas.

Quanto a este erro, verifique se ajustou o nome do controle corretamente, esta linha se rerfere ao ListView de nome lstLista :
For Column = Counter To lstLista.ColumnHeaders.Count - 2

[]s

 
Postado : 17/03/2012 8:42 pm
(@fabioprade)
Posts: 273
Reputable Member
Topic starter
 

Boa Noite Mauro,

Entao, a lstLista= List box, entao desconsiderei esta linha para o meu problema, no mesmo evento inicializar, tem outra referencia a Listview4 com nomes para as colunas e tamanho, mas esta tem como base uma aba dentro da propria planilha, ate ai esta tudo funcionando a perfeiçao, so que para as demais listview que sao 3, nao consigui automatizar o tamanho das colunas.

Mauro pergunto; Pelos meus codigos atuais, os nomes das colunas sao carregados do banco de dados, certo? Existe a possibilidade de eu fazer como foi feito para a listview4, nomeando e dando o tamnaho das colunas, sendo que carrega as informaçoes de um banco de dados externo?

Obrigado pela atençao Mauro.

 
Postado : 17/03/2012 9:24 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Fabio, não me lembro em qual dos Forum já comentei, talvez sejaem outro, mas é o seguinte.

A primeira coisa que devemos fazer ao resolvermos adaptar rotinas ou até mesmo modelos completos para o nosso projeto, é ajustar os nomes dos controles para nomes que ao nos depararmos com os mesmos nas rotinas, saibamos de qual estamos lidando, por exemplo, você utiliza o nome "lstLista" em varios formulários, e alguns são do tipo ListView e outro ListBox, isto acaba confundindo e dificultando quando precisamos fazer alguma analise para se localizar erros, portanto procure ajustar os nomes, evite nomes genericos e iguais paravários controles, mesmo que em formulários diferentes.

Quanto a questão Tamanho Automático das Colunas, em um testee rápido no último exemplo que anexou, funcionou corretamente com os LV em MultiPages, então proceda da forma abaixo especificada, e faça os testes:

1°) Crie um Novo Modulo e renomeie para ModPublico;
2°) Cole as instruções abaixo neste novo Modulo :

'INICIO - REDIMENSIONAR AUTOMATICAMENTE COLUNAS DO LISTVIEW
'TamanhoColAutomatico - 'Define os Tamanhos das colunas automaticamente
Public Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const LVM_FIRST = &H1000
Public Const LVM_SETCOLUMNWIDTH = (LVM_FIRST + 30)
Public Const LVSCW_AUTOSIZE = -1
Public Const LVSCW_AUTOSIZE_USEHEADER = -2
'FIM - REDIMENSIONAR AUTOMATICAMENTE COLUNAS DO LISTVIEW

As instruções acima são as mesmas que utilizamos para o redimensionamento das Colunas do LV, as únicas alterações que fiz, foi trocar a condição "Private" para "Public", ou seja, desta forma estará valendo para todo o conjunto, não sendo necessário repeti-las em todos os formulários.

3°) Procure nos formulários e apague estas instruções que passamos para o Modulo ModPublico, só deixando as que estão neste modulo.

4°) Ajuste as rotinas que fazem a chamada para o redimensionamento das colunas especificando cada LV, nesta parte você tem de ver quais os nomes deu aos seus controles, por exemplo :
No UserForm1 você tem o controle LV na Page "Cadastro de Clientes" com o nome padrão "ListView1", então a rotina para este controle ficaria :

Observe no nome da rotina, que no final coloquei LV_1, assim sei de qual controle estou lidando.

Private Sub TamanhoColAutoLV_1()
    Dim Column As Long
    Dim Counter As Long
    
    Counter = 0
    
    For Column = Counter To ListView1.ColumnHeaders.Count - 2
        SendMessage ListView1.hWnd, LVM_SETCOLUMNWIDTH, Column, LVSCW_AUTOSIZE_USEHEADER
    Next
    
End Sub

Como citou o nome ListView4, neste caso construimos a rotina para este controle da seguinte forma :

Private Sub TamanhoColAutoLV_4()
    Dim Column As Long
    Dim Counter As Long
    
    Counter = 0
    
    For Column = Counter To ListView4.ColumnHeaders.Count - 2
        SendMessage ListView4.hWnd, LVM_SETCOLUMNWIDTH, Column, LVSCW_AUTOSIZE_USEHEADER
    Next
    
End Sub

Procedendo desta forma, onde nós tinhamos a chamada a rotina :
Call TamanhoColAutomatico, alteramos para as expecificas de cada controle, Call TamanhoColAutoLV_1 , Call TamanhoColAutoLV_4 e assim por diante.

Espero ter conseguido explicar corretamente, faça as alterações e teste.

[]s

 
Postado : 18/03/2012 12:16 pm
(@fabioprade)
Posts: 273
Reputable Member
Topic starter
 

Boa noite Mauro,

Explicar direito? Isto foi uma aula, estarei fazendo todas as modificaçoes e testes.

Te mantenho informado.

Fabio Pradella

 
Postado : 18/03/2012 6:57 pm
(@fabioprade)
Posts: 273
Reputable Member
Topic starter
 

Mauro,

100%, foi uma aula, testes realizados com sucesso.

Um grande abraço mestre Mauro.

 
Postado : 18/03/2012 7:47 pm