Artigo: 179988 - Última revisão: terça-feira, 24 de Fevereiro de 2004 - Revisão: 3.0

CORRECÇÃO: Problema com propriedades de largura do cabeçalho da coluna de 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 | Reduzir tudo

Sintomas

Quando define programaticamente a largura de um cabeçalho da coluna, a largura da coluna, na realidade, pode aparecer maior do que o previsto. Isto apresenta um problema ao tentar guardar a largura do cabeçalho da coluna definições de modo a que pode restaurar numa altura posterior.

Causa

Internamente, a largura de um cabeçalho da coluna é preenchida com alguns constante predeterminado quando é alterado programaticamente. Esta área não está em vigor se a largura do cabeçalho da coluna é alterada através da interface do utilizador.

Resolução

Para contornar este problema, pode definir ou devolver uma largura de cabeçalho da coluna utilizando a função API EnviarMensagem com as mensagens LVM_SETCOLUMNWIDTH ou LVM_GETCOLUMNWIDTH.

As declarações constante e função são os seguintes:
     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 uma Columnheader utilizando a mensagem LVM_SETCOLUMNWIDTH, fornece o índice da coluna (começando em 0), o wParam e a nova largura como o lParam. Por exemplo, a instrução seguinte define a largura da segunda coluna (índice 1) da ListView1 a 150:
    SendMessage ListView1.hWnd, LVM_SETCOLUMNWIDTH, 1, 150
				

Para obter a largura de uma Columnheader utilizando a mensagem LVM_GETCOLUMNWIDTH, fornece o índice da coluna (começando em 0), o wParam. O lParam não utilizado e deve ser definido como 0. Por exemplo, a seguinte instrução devolve a largura da segunda coluna (índice 1) da ListView1:
    Dim LVWidth as Long
    LVWidth = SendMessage (ListView1.hWnd, LVM_GETCOLUMNWIDTH, 1, 0)
				

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no início deste artigo. Este erro foi corrigido no Visual Basic 6.0.

Mais Informação

Passos para reproduzir o comportamento

  1. Inicie um novo projecto. É criado o Form1 por predefinição.
  2. Clique em ' componentes ' no menu projecto e verifique "Microsoft Windows controlos comuns 5.0."
  3. Adicione um controlo ListView e dois CommandButtons ao Form1.
  4. Alterar a propriedade legenda de Command1 "Largura guardar" e a legenda propriedade Command2 para "Largura do restauro".
  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. Prima a tecla F5 para executar o projecto.
  7. Utilizar o cursor, redimensione a primeira coluna do controlo ListView.
  8. Clique em "Guardar largura" e clique em "Largura do restauro" e note que a largura do primeiro cabeçalho da coluna é maior do que a definição que 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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 ArticleExclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.