リストボックスで選択したアイテムを無効にするコードを書いています。つまり、リストにアイテムを表示したいが、ユーザーに選択させたくない。下の画像に示すように。またはリンクの同様の画像。VB6で可能ですか?助けてください。
質問する
5578 次
2 に答える
3
ListView コントロールに切り替えてから、特定の ListItems を Ghosted に設定してみてください。VB6 コントロールは最近見つけるのが難しくなっていますが、他のサードパーティのリストまたはグリッド コントロールもあります。
幸運を!
于 2012-09-11T12:09:41.940 に答える
3
真剣なオーナー描画の楽しみがなければ、ListBox でこれを行うことはできません。ただし、リスト ビュー コントロールを使用して行うこともできます。
これに最も近いのは、無効化されたリスト アイテムの前景色を変更し、アイテムのクリック イベントをインターセプトして、アイテムが選択されないようにすることです。リスト項目の Tag プロパティは、「無効」状態を格納するために使用されます。
マウス ボタンが押されている間、項目が「選択」されるのを防ぐために、このコードを取得できなかったことを言及しておく必要があります。これを行うには、いくつかのサブクラス化を行う必要があります。
次のクラス「ListViewWrapper」をプロジェクトに追加する必要があります。
Option Explicit
Private Const m_ksDisabled As String = "D"
Private WithEvents m_oListView As ListView
Public Sub Initialise(ByRef the_oListView As ListView)
Set m_oListView = the_oListView
End Sub
Public Property Let ListItemEnabled(ByVal the_oListItem As ListItem, ByVal the_bEnabled As Boolean)
If Not the_oListItem Is Nothing Then
If the_bEnabled Then
the_oListItem.Tag = Empty
the_oListItem.ForeColor = vbWindowText
Else
the_oListItem.Tag = m_ksDisabled
the_oListItem.ForeColor = vbGrayText
End If
End If
End Property
Public Property Get ListItemEnabled(ByVal the_oListItem As ListItem) As Boolean
If Not the_oListItem Is Nothing Then
ListItemEnabled = (the_oListItem.Tag <> m_ksDisabled)
End If
End Property
Private Sub m_oListView_ItemClick(ByVal Item As MSComctlLib.ListItem)
If Item.Tag = m_ksDisabled Then
Set m_oListView.SelectedItem = Nothing
End If
End Sub
次のように使用する必要があります。
Private m_oListViewWrapper As ListViewWrapper
Private Sub Form_Load()
Set m_oListViewWrapper = New ListViewWrapper
m_oListViewWrapper.Initialise ListView
End Sub
Private Sub Command_Click()
With m_oListViewWrapper
.ListItemEnabled(ListView.SelectedItem) = Not .ListItemEnabled(ListView.SelectedItem)
End With
End Sub
于 2012-09-11T12:11:16.273 に答える