3

リストボックスで選択したアイテムを無効にするコードを書いています。つまり、リストにアイテムを表示したいが、ユーザーに選択させたくない。下の画像に示すように。またはリンクの同様の画像。VB6で可能ですか?助けてください。

リストボックス

4

2 に答える 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 に答える