Domanda

Ho un vecchio programma VB6 che non è cambiato da un po 'ma ora ha un nuovo comportamento. Sto pensando che un componente comune sia stato aggiornato da sotto di esso. Ecco i dettagli.

Ho un controllo di ListView standard in modalità Smallicon. Codice 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 maggior parte dei listatori che vengono aggiunti hanno sia un piccolo piccolo che una didascalia (testo). Il testo di testo è impostato come opaco, il che significa che il testo è reso in un rettangolo colorato racchiuso.

Alcuni articoli però non possono avere una didascalia fornita o l'utente può cambiarlo in modo tale da non c'è didascalia. Questo era bello, con solo la mostra piccola. Ma ora qualsiasi elenchitem che ha una proprietà di testo vuota rende un rettangolo abbastanza ampio con nessun testo all'interno (come se un utente è stato tacificato da un grappolo di spazi).

Il codice da aggiungere un ListItem è semplice:

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

Ho fermato il debugger qui e ha suttato quanto segue nella finestra immediata:

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 
.

Come puoi vedere il listItem.width correttamente ricalcolare finché il testo non si svuota e poi salta su 96 pixel.

Qualcuno conosce un modo per compensare questo comportamento? Alcuni messaggi di Windows che posso utilizzare per configurare il with vuoto predefinito? Qualsiasi informazione su una modifica al comportamento di ListView potrebbe essere utile pure.

È stato utile?

Soluzione

mscomctl.ocx era Aggiornato in aprile per fissare a Vulnerabilità di sicurezza in IE - E suppongo che questo sia quando il suo comportamento è cambiato come ho una macchina VM con una versione precedente del file (dal 2004) che non si comporta in questo modo e sono abbastanza sicuro che fosse < A href="http://support.microsoft.com/kb/896559" rel="nofollow"> Ultima versione prima del recente.

Come per cosa fare a riguardo: beh, immagino che dipenda da cosa si tratta di questo che ti sta causando un problema. Se è perché stai usando la proprietà della larghezza dell'oggetto che puoi facilmente semplicemente moltiplicare con una valutazione booleana, come questa: iWidth = oLi.Width * Abs(oLi.Text <> ""). Ma se è l'aspetto di esso, non ti piace, l'unica cosa che posso pensare è mitigare l'effetto aggiungendo un singolo spazio quando / se l'utente lo imposta su svuotare. Da un punto di utilizzo del nuovo comportamento è probabilmente migliore se la modifica dell'etichetta è abilitata, in quanto fornisce un'area più ampia da fare clic.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top