我有一个旧的 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
添加的大多数 ListItems 都有一个 SmallIcon 和一个 Caption(文本)。TextBackground 设置为不透明,这意味着文本呈现在封闭的彩色矩形中。
有些项目可能没有提供标题,或者用户可以更改它以使没有标题。这曾经很好,只显示 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 行为的任何信息也可能会有所帮助。