ListView中的ListItems,带有空文本

时间:2012-05-21 13:50:43

标签: listview vb6 common-controls

我有一个旧的VB6程序,暂时没有改变,但现在有一个新的行为。我认为一个共同的组件是从它下面升级的。以下是详细信息。

我在SmallIcon模式下有一个标准的ListView控件。代码段:

'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

添加的大多数ListItem都包含SmallIcon和Caption(Text)。 TextBackground设置为Opaque,表示文本以包围的彩色矩形呈现。

虽然某些项目可能没有提供标题,或者用户可以更改它,因此没有标题。过去这很好,只有SmallIcon显示。但是现在任何具有空Text属性的ListItem都会呈现一个相当宽的封闭矩形,里面没有文本(就好像用户可能键入了一堆空格)。

添加ListItem的代码很简单:

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

我在这里停止了调试器并在即时窗口中抛出以下内容:

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 

如您所见,ListItem.Width正确重新计算,直到Text变空,然后跳转到96像素。

有没有人知道有什么方法可以弥补这种行为?我可以使用一些Windows消息来配置默认的空wdith?有关ListView行为更改的任何信息也可能有用。

1 个答案:

答案 0 :(得分:2)

Mscomctl.ocx是updated in April来修复IE中的安全漏洞 - 我猜这是因为我有一台带有旧版本文件的虚拟机(从2004年开始)的行为发生了变化不这样做,我很确定在最近的那个之前是last release

至于该怎么办:嗯,我想这取决于它是什么导致你的问题。如果是因为你正在使用项目的宽度属性,你可以很容易地将它与布尔评估相乘,如下所示:iWidth = oLi.Width * Abs(oLi.Text <> "")。但如果它是你不喜欢它的外观,我唯一能想到的是通过在/用户将其设置为空时添加单个空格来减轻效果。从使用的角度来看,如果启用了标签编辑,新行为可能会更好,因为它提供了更广泛的区域来点击。