我正在编写一个代码来禁用 LISTBOX 中的选定项目。即我想在列表中显示项目但不希望用户选择它。如下图所示。或链接中的类似图像。VB6可以吗?请帮忙。
问问题
5578 次
2 回答
3
尝试切换到 ListView 控件,然后将特定的 ListItems 设置为 Ghosted。还有其他第 3 方列表或网格控件,尽管现在 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 回答