REVISIÓN: ListView ejecuta el evento elementoHaga clic dos veces con conjunto de LabelEdit a manual

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

257495
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Síntomas
Al hacer clic en un elemento de un control ListView , el evento ItemClick para el control ListView se ejecuta dos veces.
Causa
Este problema se debe a la forma en qué etiqueta manual se implementa la edición. Cuando selecciona un elemento, se desencadena el evento de elementoHaga clic normalmente, pero, además, el control ListView permite a un temporizador integrado cuyo retraso es igual de la duración de un doble clic. Cuando transcurre este retraso, se desencadena el evento del temporizador y el código de este temporizador se determina si el control ListView debe especificar la etiqueta de modo de edición. Si se cancela la edición de etiquetas, que siempre es el caso de edición de etiquetas manual, la selección está desactivada y re-selected. Este re-selection desencadena la segunda ItemClick .

Puede hacer que este problema de dos maneras. La primera es establecer la propiedad LabelEdit de ListView para lvwManual (como en el código de ejemplo en la sección "Más información" de este artículo). Una forma alternativa de reproducir este comportamiento es establecer la propiedad LabelEdit en lvwAutomatic y establecer Cancelar igual a True en el evento BeforeLabelEdit de ListView .
Solución
Para resolver este problema, instale el service pack más reciente para Visual Studio 6.0.

Si no es una opción de instalar el service pack o estás ejecutando una versión anterior a la versión 6.0 de Visual Basic, establezca la propiedad LabelEdit del control ListView en lvwAutomatic y no establezca Cancelar igual a True el en el evento BeforeLabelEdit de ListView .
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados al principio de este artículo. Este error se corrigió en el service pack más reciente para Visual Studio 6.0.

Para obtener información adicional acerca de los de Visual Studio service Pack, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
194022Studio 6.0 Service Pack de información: Visual qué son, dónde están y por qué

194295Cómo: Saber que está instalado un Service Pack de Visual Studio
Para descargar el service pack más reciente de Visual Studio, visite el siguiente sitio Web de Microsoft:
Más información

Pasos para reproducir este comportamiento

  1. Crear un nuevo proyecto EXE estándar en Visual Basic. Se creará Form1 de manera predeterminada.
  2. En el menú proyecto , elija componentes , seleccione Microsoft Windows Common Controls y, a continuación, haga clic en Aceptar .
  3. Agregue un control ListView a Form1.
  4. Pegue el código siguiente en la ventana de código de 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. Ejecutar el ejemplo.
  6. Haga clic en elemento "dos" en el control ListView . Esto debería producir el texto del elemento que se muestra "two" en la ventana inmediata y depuración.
  7. Espere unos instantes y haga clic nuevo elemento "dos". El resultado es el texto del elemento "dos" se muestran dos veces más en la ventana Inmediato y depuración.
SP4

Advertencia: este artículo se ha traducido automáticamente

Propiedades

Id. de artículo: 257495 - Última revisión: 02/23/2014 14:02:50 - Revisión: 2.2

  • Microsoft Visual Basic 6.0 Edición de aprendizaje
  • 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 KbMtes
Comentarios