Pregunta

Tengo un antiguo programa VB6 que no ha cambiado en un tiempo, pero ahora tiene un nuevo comportamiento. Estoy pensando que un componente común se actualizó desde debajo. Aquí están los detalles.

Tengo un control de ListView estándar en el modo Smallecon. Código SNIPPET:

'setup the listview
With lvwMap
   .Appearance = ccFlat
   .BackColor = vbBlack
   .BorderStyle = ccNone
   .Font.Name = "Arial" 
   .Font.Bold = True
   .Font.Size = 9
   .ForeColor = vbYellow
   .LabelEdit = lvwManual
   .LabelWrap = True
   .OLEDropMode = ccOLEDropManual
   .PictureAlignment = lvwTopLeft
   .TextBackground = lvwOpaque
   .View = lvwSmallIcon
End With

La mayoría de los listitemas que se agregan tienen una pequeña y pequeña y un título (texto). El campo de texto se establece como opaco, lo que significa que el texto se representa en un rectángulo de color cerrado.

Es posible que algunos artículos pueden no tener un título proporcionado o el usuario puede cambiarlo de manera que no haya título. Esto solía estar bien, con solo la pequeña muestra. Pero ahora, cualquier listito que tenga una propiedad de texto vacía hace que un rectángulo adjunte bastante ancho sin texto dentro (como si un usuario se conectaba en un montón de espacios quizás).

El código para agregar un listitoem es directo:

 Set oLI = lvwMap.ListItems.Add(lvwMap.ListItems.Count + 1, Key:=sKey)
 oLI.SmallIcon = sIcon
 oLI.Text = sCaption

Detengo el depurador aquí y prospedó lo siguiente en la ventana inmediata:

oLI.Text= "AAAAAAA"
?oLI.Width
 100.0063 

oLI.Text= "AAAAAA"
?oLI.Width
 91.99371 

oLI.Text= "AAAAA"
?oLI.Width
 84.0189 

oLI.Text= "AAAA"
?oLI.Width
 76.0063 

oLI.Text= "AA"
?oLI.Width
 60.0189 

oLI.Text= "A"
?oLI.Width
 52.0063 

oLI.Text= ""
?oLI.Width
 96.00001 

Como puede ver el LISTITEM.Width se recalcule correctamente hasta que el texto se vacíe y luego salta a 96 píxeles.

¿Alguien sabe alguna manera de compensar este comportamiento? ¿Algún mensaje de Windows que puedo usar para configurar el vacío predeterminado WDATH? Cualquier información sobre un cambio en el comportamiento de ListView también puede ser útil.

¿Fue útil?

Solución

msmpctl.ocx fue actualizado en abril para arreglar un Vulnerabilidad de seguridad en IE, y supongo que esto es cuando su comportamiento cambió ya que tengo una máquina VM con una versión anterior del archivo (desde 2004) que no se comporta de esta manera y estoy bastante seguro de que fue el < un href="http://support.microsoft.com/kb/896559" rel="nofollow"> Última versión antes del reciente.

En cuanto a qué hacer al respecto, bueno, supongo que depende de lo que se trata de eso, lo que le está causando un problema. Si es porque está utilizando la propiedad del ancho del artículo, podría multiplicarlo fácilmente con una evaluación booleana, como esta: iWidth = oLi.Width * Abs(oLi.Text <> ""). Pero si es la apariencia de ella, no te gusta, lo único que puedo pensar es mitigar el efecto agregando un espacio único cuando el usuario lo configura para vaciar. Desde un punto de vista de uso, el nuevo comportamiento es probablemente mejor si la edición de la etiqueta está habilitada, ya que proporciona un área más amplia para hacer clic en.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top