我在 Form_Load中有这样一段:
    ListArea.Clear
    a = 0
    If rec.RecordCount <> 0 Then
        rec.MoveFirst
        Do While Not rec.EOF
            Me.ListArea.AddItem rec.Fields(0).Value
            ListArea.Selected(ListArea.ListCount - 1) = True
            a = a + 1
            rec.MoveNext
        Loop
    End If
    Label5.Caption = rec.RecordCount
    Label7.Caption = a
label5 、label7在界面上显示的是共有项数和被选中项数。
我现在想实现:当我的被选中项数发生改变是,label7中的数字也相应的发生改变。我用了listarea_click结果程序在走到ListArea.Selected(ListArea.ListCount - 1) = True
时就跳到listarea_click这来了。应该怎么做呢?请大家指点一下!谢谢!

解决方案 »

  1.   

    Me.ListArea.AddItem   rec.Fields(0).Value 
     把0 改为I 试试Label1_Change()
      

  2.   

    不行,提示说“在对应的所需集合或序列中,未找到该项目”
    还有,你的Label1_Change()是什么意思?我没明白,你是想说Label一有变化就触发Change()?可是,你获取不了Label的caption啊。
      

  3.   

    是不是这个:
    '返回listbox被选中项的总数,把ListArea做为参数
    Private Function GetLstSelect(lst As Control) As Integer
        Dim i As Integer
        Dim Num As Integer
        Num = 0
        For i = 0 To lst.ListCount - 1
            If lst.selected(i) = True Then
                Num = Num + 1
            End If
        Next i
        GetLstSelect = Num
    End Function返回选中项:ListArea.ListIndex
      

  4.   

    大奇的这段代码我看得很明白,但是,我不知道怎么得到它的返回值,怎么和我的label.caption连接起来。我很笨的,请再说详细点好吗?谢谢!
      

  5.   

    是这样
    label5.caption=GetLstSelect(ListArea)    '共有项数
    label7.caption=ListArea.ListIndex        '被选中项数
      

  6.   

    '****** 工程引用Microsoft ActiveX Data Objects 2.5 Library
    '添加 List1 Label1 Label2 Command1
    'List1 的 Multiselect 设为2
    '改为你自己的数据库与表名
    '1.在Form_Load时你是打开了库并添加记录到List1,此时你跟本就不可能有被选中的内容
    '2.因为你要点选List1中的内容,所以你没有理由使用List1_Click事件Public conn As New ADODB.Connection '定义数据连接字符串
    Public rec As New ADODB.Recordset '定义记录集
    Dim db$, i%, jj%, tsel%Private Sub Form_Load()
       db = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & "c:\bwscale.mdb"
       conn.CursorLocation = adUseClient
       conn.Open db '打开数据库连接
       rec.Open "bwmain", conn, adOpenKeyset, adLockPessimistic '打开记录集
       If rec.RecordCount > 0 Then
          rec.MoveFirst
          List1.Clear
          For i = 0 To rec.RecordCount - 1
             List1.AddItem rec.fields(1)
             rec.MoveNext
          Next i
          rec.MoveFirst
       End If
       Label1.Caption = CStr(rec.RecordCount) '记录总共有几笔
       Label2.Caption = ""
    End SubPrivate Sub Command1_Click()
       tsel = 0
       For i = 0 To List1.ListCount - 1
          If List1.Selected(i) Then tsel = tsel + 1
       Next i
       Label2.Caption = CStr(tsel) '被选中的记录有几笔
    End Sub
      

  7.   

    但是,我是想在我对listbox中的选项做选择的时候,label中的被选中项就跟着发生变化,而不是在我点击一个按钮以后才显示出来,不知道我这个想法能实现吗?
      

  8.   

    这是另种方法, 我并不完全明白你想干啥, 试看这个List1的Multiselect要设2使用复选你要按住 Ctrl 再用鼠标去选,选完后Ctrl松开 Label1将显示出所有被选中内容,Label2就是被选中的笔数
    Dim aa$, i%, trec%
    Private Sub Form_Load()
       Open "c:\88.txt" For Input As #1
       While Not EOF(1)
          Line Input #1, aa
          List1.AddItem aa
       Wend
       Close #1
       'Me.KeyPreview = True
    End SubPrivate Sub List1_KeyUp(KeyCode As Integer, Shift As Integer)
       aa = "": trec = 0
       For i = 0 To List1.ListCount - 1
          If List1.Selected(i) Then trec = trec + 1: aa = aa & List1.List(i) & vbCrLf
       Next i
       Label1.Caption = aa
       Label2.Caption = CStr(trec) & " 笔被选中"
    End Sub