禁用VB6列表框中的选定项目

3
我正在编写一段代码来禁用LISTBOX中选择的项目。 即我想在列表中显示该项目,但不希望用户选择它。 如下图所示。或类似链接中的图片。 在VB6中是否可能实现? 请帮忙。
2个回答

3

尝试切换到ListView控件,然后将特定的ListItems设置为Ghosted。还有其他第三方列表或网格控件可用,但VB6控件现在越来越难找到。

祝你好运!


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接