CORRECÇÃO: ListView executa o evento ItemClick duas vezes com LabelEdit definido como manual

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.

257495
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sintomas
Quando clica num item num controlo ListView , o evento ItemClick para o controlo ListView é executado duas vezes.
Causa
Este problema é causado pela forma como a etiqueta manual edição é implementada. Quando selecciona um item, o evento ItemClick é desencadeado normalmente, mas, para além disso, o controlo ListView permite um temporizador incorporado cujo atraso é igual a que a duração de um duplo clique. Quando este atraso decorrido, evento o temporizador é accionado e o código para este temporizador determina se o controlo ListView deve introduzir o nome do modo de edição. Se editar etiqueta for interrompida, que é sempre o caso para edição manual de etiqueta e a selecção está desmarcada e re-selected. Este re-selection acciona o segundo ItemClick .

Pode causar este problema ocorrer de duas formas. A primeira consiste em definir a propriedade LabelEdit de ListView lvwManual (como no código de exemplo na secção "Mais informação" deste artigo). Uma forma alternativa de reproduzir este comportamento é definir a propriedade LabelEdit para lvwAutomatic e definir Cancelar igual a VERDADEIRO o evento BeforeLabelEdit de ListView .
Resolução
Para resolver este problema, instale o service pack mais recente para o Visual Studio 6.0.

Se instalar o service pack não é uma opção ou estiver a executar uma versão anterior à versão 6.0 do Visual Basic, defina a propriedade LabelEdit do controlo ListView como lvwAutomatic e não defina Cancelar igual a VERDADEIRO no evento BeforeLabelEdit de ListView .
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 service pack mais recente para o Visual Studio 6.0.

Para obter informações adicionais sobre service packs do Visual Studio, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
194022INFO: Visual Studio 6.0 Service Packs, que, em que, por que razão

194295COMO: Determinar se o Visual Studio Service Pack está instalado
Para transferir o Visual Studio service pack mais recente, visite o seguinte Web site da Microsoft:
Mais Informação

Passos para reproduzir o comportamento

  1. Crie um novo projecto EXE padrão no Visual Basic. É criado o Form1 por predefinição.
  2. No menu Project , seleccionar componentes , seleccione Controlos comuns do Microsoft Windows e, em seguida, clique em OK .
  3. Adicione um controlo ListView ao Form1.
  4. Cole o seguinte código na janela de código do Form1:
    Option ExplicitPrivate Sub Form_Load()    Dim Col As ColumnHeader    Dim itmAdd As ListItem        ' Set the report's view    ListView1.View = lvwReport        ' Add a column to the listview    Set Col = ListView1.ColumnHeaders.Add(Text:="Items")        ' Set the label editing to manual    ListView1.LabelEdit = lvwManual        ' Add some sample data    Set itmAdd = ListView1.ListItems.Add(Text:="one")    Set itmAdd = ListView1.ListItems.Add(Text:="two")End SubPrivate Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)    Debug.Print ListView1.SelectedItem.TextEnd Sub					
  5. Execute o exemplo.
  6. Clique item "dois" no controlo ListView . Isto deve resultar em texto do item "dois" que está a ser apresentados na janela depuração/imediata.
  7. Aguarde um momento e, em seguida, clique novamente o item "dois". Isto resulta no texto do item "dois" que está a ser apresentada mais duas vezes na janela de depuração/imediata.
SP4

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 257495 - Última Revisão: 02/23/2014 19:32:01 - Revisão: 2.2

  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic Control Creation Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • kbnosurvey kbarchive kbmt kbactivexevents kbbug kbctrl kbfix kblistview kbvs600sp4fix kbvs600sp5fix KB257495 KbMtpt
Esta informação foi útil?