空のテキストを持つListViewのListItems
-
12-12-2019 - |
質問
しばらくしていない古いVB6プログラムがありますが、新しい動作があります。私は一般的なコンポーネントがその下からアップグレードされたと思っています。これが詳細です。
StremalIconモードでは、標準の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とキャプション(テキスト)の両方を持ちます。テキストバックグラウンドは不透明に設定されているため、テキストは囲まれた色の四角形でレンダリングされます。
いくつかの項目が提供されていない場合、またはユーザーがキャプションがないように変更することができます。これは細かいものだけで、まさに表示されていました。ただし、空のテキストプロパティを持つ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が正しく再計算され、次に96ピクセルにジャンプします。
この行動を補うために誰かが知っていますか?デフォルトの空のWdithを設定するために使用できるWindowsメッセージの中には、いくつかのWindowsメッセージがありますか? ListViewの動作への変更に関する情報も役に立つかもしれません。
解決
mscomctl.ocxは April で更新されました。 IEのセキュリティ上の脆弱性 - そして私はこれが、このように行動することができないファイルの古いバージョンのファイルを持つVMマシンを持っているので、その動作が変更されたときに、そして私はそれが<であると確信しているので、これはその動作が変わったときです。 href="http://support.microsoft.com/kb/896559" rel="nofollow">最近の前の最後のリリース。
それについての道順について:まあ、私はそれがそれがそれがそれがあなたに問題を引き起こしているのかによって異なります。アイテムの幅プロパティを使用しているからであれば、このようにブール評価に簡単に掛けることができます.iWidth = oLi.Width * Abs(oLi.Text <> "")
。しかし、それがあなたが好きではないのが好きであるならば、私が考えることができる唯一のことは、ユーザーが空のときにそれを設定した場合に/単一のスペースを追加することによって効果を軽減することです。使用状況の観点からは、ラベル編集が有効になっている場合、新しい動作はおそらくより良いです。