У меня есть старая программа VB6, которая не изменилась через некоторое время, но теперь имеет новое поведение. Я думаю, что общий компонент был обновлен из-под него. Вот подробности.ListItems в ListView с пустым текстом
У меня есть стандартный элемент управления 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
Большинство ListItems, добавляемые имеют одновременно SmallIcon и Caption (Текст). TextBackground устанавливается как непрозрачный, то есть текст отображается в прямоугольнике с закрытыми цветами.
Некоторые предметы, хотя могут не иметь подпись или пользователь может ее изменить, чтобы подпись не содержалась. Это было хорошо, только показывая SmallIcon. Но теперь любой ListItem, у которого есть пустое свойство Text, создает довольно широкий прямоугольник с прямоугольником без текста внутри (как если бы пользователь, возможно, использовал пучок пробелов).
Код для добавления ListItem прямо вперед:
Set oLI = lvwMap.ListItems.Add(lvwMap.ListItems.Count + 1, Key:=sKey)
oLI.SmallIcon = sIcon
oLI.Text = sCaption
Я остановил отладчик здесь и thried следующее в немедленном окне:
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. Ширина правильно пересчитывается до тех пор, пока текст не станет пустым, а затем скачет до 96 пикселей.
Кто-нибудь знает какой-либо способ компенсировать это поведение? Некоторое оконное сообщение, которое я могу использовать для настройки пустого wdith по умолчанию? Любая информация об изменении поведения ListView также может быть полезна.
Что вызывает проблему, так это то, что метка непрозрачна. Изображение желтого текста на черном ограничивающем прямоугольнике точно соответствует размеру для инкапсуляции текста. Это необходимо, потому что сам ListView имеет фоновое изображение. Но теперь значки без текста имеют эти большие (почти 100 px), уродливые, пустые бары, плавающие рядом с ними. Это значки, и их положение наиболее важно. Текст не является обязательным. Кроме того, текст не редактируется, нажимая на него, так что это не важно. Интересно, могу ли я вручную развернуть версию этого ocx в бок о бок/локальную конфигурацию. – tcarvin
И, конечно же, спасибо за информацию, которую вы предоставили до сих пор! – tcarvin
@tcarvin Правильно, извините, я не полностью оценил эффект свойства TextBackground, поскольку ListView, с которым я его пробовал, не имел фонового изображения - я понимаю, что вы сейчас имеете в виду. Интересная идея попробовать и запустить ее со старой локальной версией ocx бок о бок. Я однажды попробовал что-то подобное, чтобы сделать небольшое портативное приложение, но я сдался, когда оказалось, что это сложнее, чем я думал, что это стоит того. :-). Так что удачи в этом и, пожалуйста, дайте нам знать, как вы справляетесь. – Antagony