listbox的多选属性为真,假设我选定了三和五两个条目,如何删除它们或是得到它们的值?

解决方案 »

  1.   

    用sendmessage发送lb_getselitems即可:
    Option ExplicitPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Const LB_DELETESTRING = &H182
    Private Const LB_GETSELCOUNT = &H190
    Private Const LB_GETSELITEMS = &H191Private Sub Command1_Click()
        Dim i As Long
        i = SendMessage(List1.hwnd, LB_GETSELCOUNT, 0, ByVal 0&)
        MsgBox "有" + CStr(i) + "个条目被选中"
        If i = 0 Then '没有item被选中
            Exit Sub
        End If
        Dim itemIndex() As Long
        ReDim itemIndex(i - 1)
        Call SendMessage(List1.hwnd, LB_GETSELITEMS, i, itemIndex(0))
        Dim s As String
        For i = 0 To UBound(itemIndex)
            s = s + " " + CStr(itemIndex(i))
        Next
        MsgBox "它们的index分别是:" + s 'listbox条目的index从0开始,即第1项为0
    End SubPrivate Sub Form_Load()
        Dim i As Long
        For i = 1 To 20
            Me.List1.AddItem "line " + CStr(i)
        Next
    End Sub
      

  2.   

    '得到选中的值
    Private Sub Command1_Click()
    Dim i As Long
    Dim ii As Longi = List1.ListCount
    For ii = 0 To i - 1
        If List1.Selected(ii) = True Then
            Debug.Print List1.List(ii)
        End If
    Next ii
    End Sub
      

  3.   

    Private Sub Command1_Click()
        Dim i As Integer
        Dim iCount As Integer
        
        iCount = List1.ListCount - 1
        i = 0
        Do While i <= iCount
            If List1.Selected(i) = True Then
                List1.RemoveItem i
                i = i - 1
                iCount = iCount - 1
            End If
            i = i + 1
        Loop
    End Sub