Вопрос

У меня есть старая программа 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 <> ""). Но если это появление этого, вам не нравится, единственное, о чем я могу придумать, это смягчить эффект, добавив одно пространство, когда / если пользователь устанавливает его для опорожнения. С точки зрения использования новое поведение, вероятно, лучше, если редактирование метки включено, поскольку он предоставляет более широкую область, чтобы нажать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top