ID do artigo: 179988 - Última revisão: terça-feira, 24 de fevereiro de 2004 - Revisão: 3.0

CORRECÇÃO: Problema ColumnHeader largura propriedade do ListView

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.

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Quando você define a largura de um ColumnHeader programaticamente, a largura da coluna, na verdade, pode aparecer maior do que o esperado. Isso apresenta um problema ao tentar salvar a largura da ColumnHeader configurações para que possa restaurá-las em um momento posterior.

Causa

Internamente, a largura de um ColumnHeader é preenchida com alguns constante predeterminado quando ele é alterado através de programação. Esse preenchimento não tem efeito se a largura do ColumnHeader for alterada por meio da interface do usuário.

Resolução

Para contornar esse problema, pode definir ou retornar uma largura ColumnHeader usando a função API SendMessage com as mensagens LVM_SETCOLUMNWIDTH ou LVM_GETCOLUMNWIDTH.

As declarações de constante e a função são:
     Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
          ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
          ByVal lParam As Long) As Long

     Const LVM_FIRST = &H1000
     Const LVM_GETCOLUMNWIDTH = LVM_FIRST + 29
     Const LVM_SETCOLUMNWIDTH = LVM_FIRST + 30
				

Para definir a largura de um Columnheader usando a mensagem LVM_SETCOLUMNWIDTH, você pode fornecer o índice da coluna (começando com 0) como o wParam e a nova largura como o lParam. Por exemplo, a instrução a seguir define a largura da segunda coluna (índice 1) de ListView1 como 150:
    SendMessage ListView1.hWnd, LVM_SETCOLUMNWIDTH, 1, 150
				

Para recuperar a largura de um Columnheader usando a mensagem LVM_GETCOLUMNWIDTH, você pode fornecer o índice da coluna (começando com 0) como o wParam. O lParam é não utilizado e deve ser definido como 0. Por exemplo, a instrução a seguir retorna a largura da segunda coluna (índice 1) da ListView1:
    Dim LVWidth as Long
    LVWidth = SendMessage (ListView1.hWnd, LVM_GETCOLUMNWIDTH, 1, 0)
				

Situação

A Microsoft confirmou este é um bug em produtos Microsoft listados no começo deste artigo. Esse bug foi corrigido no Visual Basic 6.0.

Mais Informações

Etapas para reproduzir o problema

  1. Inicie um novo projeto. O Form1 é criado por padrão.
  2. Clique em componentes, no menu Project e verifique "Microsoft Windows Common Controls 5.0."
  3. Adicione dois CommandButtons e um controle ListView ao Form1.
  4. Altere a propriedade Caption de Command1 para "Salvar largura" e a legenda propriedade do Command2 para "Largura de restauração".
  5. Adicione o seguinte código ao Form1:
          Dim iWidth1 As Long
          Dim iWidth2 As Long
    
          Private Sub Command1_Click()
             'Save the current column widths
             iWidth1 = ListView1.ColumnHeaders(1).Width
             iWidth2 = ListView1.ColumnHeaders(2).Width
          End Sub
    
          Private Sub Command2_Click()
             'Restore the column widths
             ListView1.ColumnHeaders(1).Width = iWidth1
             ListView1.ColumnHeaders(2).Width = iWidth2
          End Sub
    
          Private Sub Form_Load()
             'Add 2 column headers to ListView1 and specify an
             'initial width of 1000 for both
             With ListView1
                .View = lvwReport
                .ColumnHeaders.Add , , "Column 1", 1000
                .ColumnHeaders.Add , , "Column 2", 1000
             End With
          End Sub
    
    						
  6. Pressione a tecla F5 para executar o projeto.
  7. Usando o cursor, redimensione a primeira coluna do controle ListView.
  8. Clique em "Salvar largura" e clique em "Largura de restauração" e observe que a largura da ColumnHeader primeira é maior do que a configuração que você especificou.

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Palavras-chave: 
kbmt kbbug kbfix kbgrpdsvb KB179988 KbMtpt
Tradução automáticaTradução automática
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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 179988  (http://support.microsoft.com/kb/179988/en-us/ )
Retired KB ArticleAviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.