2012-05-21 4 views
4

У меня есть старая программа 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 также может быть полезна.

ответ

2

Mscomctl.ocx был updated in April, чтобы устранить уязвимость безопасности в IE - и я предполагаю, что это происходит, когда его поведение изменилось, поскольку у меня есть машина VM с более старой версией файла (с 2004 года), которая не ведет себя таким образом, и я уверен, что это был last release до недавнего.

Что касается этого: ну, я думаю, это зависит от того, что это такое, что вызывает у вас проблему. Если это связано с тем, что вы используете свойство ширины элемента, вы можете просто просто умножить его на булевскую оценку, например: iWidth = oLi.Width * Abs(oLi.Text <> ""). Но если это внешний вид, который вам не нравится, единственное, что я могу придумать, - это смягчить эффект, добавив одно пространство, когда/если пользователь устанавливает его в пустую. С точки зрения использования, новое поведение, вероятно, лучше, если разрешено редактирование меток, так как оно обеспечивает более широкую область, в которую нужно щелкнуть.

+0

Что вызывает проблему, так это то, что метка непрозрачна. Изображение желтого текста на черном ограничивающем прямоугольнике точно соответствует размеру для инкапсуляции текста. Это необходимо, потому что сам ListView имеет фоновое изображение. Но теперь значки без текста имеют эти большие (почти 100 px), уродливые, пустые бары, плавающие рядом с ними. Это значки, и их положение наиболее важно. Текст не является обязательным. Кроме того, текст не редактируется, нажимая на него, так что это не важно. Интересно, могу ли я вручную развернуть версию этого ocx в бок о бок/локальную конфигурацию. – tcarvin

+0

И, конечно же, спасибо за информацию, которую вы предоставили до сих пор! – tcarvin

+0

@tcarvin Правильно, извините, я не полностью оценил эффект свойства TextBackground, поскольку ListView, с которым я его пробовал, не имел фонового изображения - я понимаю, что вы сейчас имеете в виду. Интересная идея попробовать и запустить ее со старой локальной версией ocx бок о бок. Я однажды попробовал что-то подобное, чтобы сделать небольшое портативное приложение, но я сдался, когда оказалось, что это сложнее, чем я думал, что это стоит того. :-). Так что удачи в этом и, пожалуйста, дайте нам знать, как вы справляетесь. – Antagony

 Смежные вопросы

  • Нет связанных вопросов^_^