ListitaMems en ListView con texto vacío
-
12-12-2019 - |
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.
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.