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

我在小码模式下有一个标准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都有一个小单音和标题(文本)。 TextBackground设置为不透明,这意味着文本在封闭彩色矩形中呈现。

某些项目虽然可能没有提供的标题,或者用户可以改变它,使得没有标题。这曾经很好,只有小小的显示。但现在具有空文本属性的任何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正确重新计算,直到文本变为空,然后跳转到96像素。

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

有帮助吗?

解决方案

mscomctl.ocx是更新于4月份修复a IE中的安全漏洞 - 我猜这是当我的行为发生变化时,因为我拥有一个具有旧版本的文件(从2004年)这样的VM机器,那就是这种方式,我很确定是<一个href=“http://support.microsoft.com/kb/896559”rel=“nofollow”>最后一个版本在最近的一个。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top