2012-09-11 68 views
3

我正在寫一個代碼來禁用LISTBOX中的選定項目。 即我想在列表中顯示項目,但不希望用戶選擇它。 如下圖所示。或在link中的類似圖像。 在VB6中可能嗎? 請幫忙。禁用列表框中的選定項目VB6

list box

回答

2

如果沒有認真的所有者繪製樂趣,你不能用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 
3

嘗試切換到ListView控制,然後將特定listItems中設置爲幻影。還有其他第三方列表或網格控件,儘管VB6控件越來越難找到這些日子。

祝你好運!

相關問題