listview - 带有空文本的 ListView 中的 ListItems

标签 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

添加的大多数 ListItems 都有一个 SmallIcon 和一个标题(文本)。 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 行为更改的任何信息也可能会有所帮助。

最佳答案

Mscomctl.ocx 是 updated in April修复 IE 中的一个安全漏洞——我猜这是它的行为发生变化的时候,因为我有一台带有旧版本文件(从 2004 年)的 VM 机器,它不会以这种方式运行,我很确定是 last release在最近的之前。

至于如何处理:嗯,我想这取决于导致您出现问题的原因。如果是因为您正在使用项目的宽度属性,您可以轻松地将它与 bool 计算相乘,如下所示:iWidth = oLi.Width * Abs(oLi.Text <> "") .但是,如果您不喜欢它的外观,我唯一能想到的就是在/如果用户将其设置为空时添加一个空格来减轻这种影响。从使用的角度来看,如果启用标签编辑,新行为可能会更好,因为它提供了更大的点击区域。

关于listview - 带有空文本的 ListView 中的 ListItems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10686558/

相关文章:

c++ - 时间选择器控件的 DTM_SETFORMAT 不支持格式说明符

android - 如何将可编辑的编辑文本放入 ListView 中?

vb6 - VB6 可以使用巡航控制吗?

dll - 如何拦截 VB6 ActiveX DLL 中的 DLL 加载/卸载事件?

if-statement - 如何执行相当于 "If something is not X then"的 If 语句

delphi - 在 Windows 7 X64 中,状态栏无法正确显示从第 11 位开始的面板文本

android - 如何在 ListView 的展示 View 中制作矩形 View

java - ListView 项目没有点击

c# - 在 C# Windows 窗体中将组和项目添加到 ListView