ListiTems в ListView с пустым текстом
-
12-12-2019 - |
Вопрос
У меня есть старая программа VB6, которая не изменилась через некоторое время, но теперь имеет новое поведение. Я думаю, что общий компонент был обновлен из-под него. Вот детали.
У меня есть стандартный элемент управления ListView в режиме Smallicon. Кодовый фрагмент:
'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
.
Большинство употреблений, которые добавлены, имеют как маленький, так и подписи (текст). TextBackground устанавливается как непрозрачный, что означает, что текст отображается в окрашенном цветном прямоугольнике.
Некоторые вещи, хотя могут не иметь прилагаемого подписи или пользователь может изменить его так, что нет заголовка. Это было нормально, только с небольшим показам. Но теперь любой список, который имеет пустое текстовое свойство, образует довольно широкий ограждающий прямоугольник без текста внутри (как будто пользователь, возможно, на кучу пробелов).
Код для добавления 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 был Обновлено в апреле для исправления Уязвимость безопасности в IE - и я предполагаю, что это когда его поведение изменилось, когда у меня есть машины VM со стальной версией файла (с 2004 года), которая не ведет себя таким образом, и я уверен, что < href="http://support.microsoft.com/kb/896559" Rel="nofollow"> Последний релиз до недавнего.
Что касается того, что делать с этим: ну, я думаю, что зависит от того, что это связано с этим, что вызывает вам проблему. Если это потому, что вы используете свойство ширины товара, вы можете легко умножить его с логической оценкой, как это: iWidth = oLi.Width * Abs(oLi.Text <> "")
. Но если это появление этого, вам не нравится, единственное, о чем я могу придумать, это смягчить эффект, добавив одно пространство, когда / если пользователь устанавливает его для опорожнения. С точки зрения использования новое поведение, вероятно, лучше, если редактирование метки включено, поскольку он предоставляет более широкую область, чтобы нажать.