4

しばらく変更されていない古い VB6 プログラムがありますが、現在は新しい動作をしています。共通コンポーネントがその下からアップグレードされたと思います。詳細はこちら。

SmallIcon モードの標準の 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 と Caption (Text) の両方があります。TextBackground は Opaque として設定されます。つまり、テキストは色付きの四角形で囲まれてレンダリングされます。

ただし、キャプションが提供されていないアイテムや、キャプションがないようにユーザーが変更できるアイテムもあります。SmallIcon だけが表示されていれば、これは以前は問題ありませんでした。しかし、空の Text プロパティを持つ 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 

ご覧のとおり、Text が空になるまで ListItem.Width が正しく再計算され、その後 96 ピクセルにジャンプします。

この動作を補う方法を知っている人はいますか? デフォルトの空の wdith を構成するために使用できる Windows メッセージがありますか? ListView の動作の変更に関する情報も役立つ場合があります。

4

1 に答える 1

2

Mscomctl.ocx は4 月に更新され、IE のセキュリティ上の脆弱性が修正されました。私が使用している VM マシンのファイルの古いバージョン (2004 年以降) はこのように動作しないため、動作が変わったのはこのためだと思います。それが最近のリリースの前の最後のリリースだったと確信しています。

それについて何をすべきかについては、問題の原因が何であるかによって異なります。アイテムの width プロパティを使用していることが原因である場合は、次のようにブール値の評価を簡単に掛けることができますiWidth = oLi.Width * Abs(oLi.Text <> "")。しかし、見た目が気に入らない場合は、ユーザーが空に設定した場合にスペースを 1 つ追加して効果を軽減することしか考えられません。使用の観点からは、ラベルの編集が有効になっていると、クリックする領域が広くなるため、新しい動作の方がおそらく優れています。

于 2012-05-21T22:08:47.343 に答える