list控件中用Scroll选择列表框选项,程序没反映,必须再点击list中的内容程序才执行!请问有什么办法让scroll选择列表框其中内容后,程序能立即执行?请赐教!Private Sub list1_Scroll()
        Call Fill_Click
    End Sub
    Private Sub Form_Load()
        
        '  初始话列表框选项
        list1.AddItem "0 实线"
        list1.AddItem "1 透明"
        list1.AddItem "2 水平直线"
        list1.AddItem "3 垂直直线"
        list1.AddItem "4 上斜对角线"
        list1.AddItem "5 下斜对角线"
        list1.AddItem "6 十字线"
        list1.AddItem "7 交叉对角线"
End Sub
Private Sub list1_Click()
        
        If Fill.ListIndex <> "-1" Then
            '  设置填充方式
            Shape1.FillStyle = Fill.ListIndex
        End If
    
End Sub

解决方案 »

  1.   

    Scroll属性不是要触发滚动条才发生的事件吗??这时候,你并没有在LIST选定项目呀?VB如何判断你点的是LIST中哪个值呢?
    为什么要用Scroll???搞不懂。
      

  2.   

    不好意思哦,我弄错了,应该是这样的
    Private Sub list1_Scroll()
            Call list1_Click
        End Sub
        Private Sub Form_Load()
            
            '  初始话列表框选项
            list1.AddItem "0 实线"
            list1.AddItem "1 透明"
            list1.AddItem "2 水平直线"
            list1.AddItem "3 垂直直线"
            list1.AddItem "4 上斜对角线"
            list1.AddItem "5 下斜对角线"
            list1.AddItem "6 十字线"
            list1.AddItem "7 交叉对角线"
    End Sub
    Private Sub list1_Click()
            
            If list1.ListIndex <> "-1" Then
                '  设置填充方式
                Shape1.FillStyle = list1.ListIndex
            End If
        
    End Sub
      

  3.   

    晕啊!你没有选中list里面的内容,那么  list1.ListIndex  的值就是 -1啊! 那么怎么能给shape填充呢!?
      

  4.   

    我的意思就是用Scroll更换了list里显示的内容,如何让语句马上执行,即shape马上填充,而不必更换了内容后还要点一下list,使它得到焦点后语句才执行?
      

  5.   

    那就用 combo 控件吧,不是更加方便?
      

  6.   

    Private Sub Form_Load()
            '  初始话列表框选项
            Combo1.AddItem "0 实线"
            Combo1.AddItem "1 透明"
            Combo1.AddItem "2 水平直线"
            Combo1.AddItem "3 垂直直线"
            Combo1.AddItem "4 上斜对角线"
            Combo1.AddItem "5 下斜对角线"
            Combo1.AddItem "6 十字线"
            Combo1.AddItem "7 交叉对角线"
            Combo1.ListIndex = 0
    End Sub
    Private Sub Combo1_Click()
            
            If Combo1.ListIndex <> "-1" Then
                '  设置填充方式
                Shape1.FillStyle = Combo1.ListIndex
            End If
        
    End Sub
      

  7.   

    你说的是按SCROLL后自动选中显示区的第一个条目吗?很简单使用Windows API
    SendMessage可获取该条目的Index,然后将该值赋予Listindex属性,自动触发
    CLICK事件
      

  8.   

    获取第一可视条目的message ID为LB_GETTOPINDEX ( &H18E)
      

  9.   

    具体怎么写啊,我刚学vb,api对我来说还有点摸不到北哦。能写具体点吗?请赐教!写完整我把分给你
      

  10.   

    你把list高度设置为只有1行了是吗?但是你滚动scroll时由于list中选择的项目没变,因此不会触发什么事件。
    你把list改为combobox控件相信可以很好的解决你的问题。
      

  11.   

    Private Declare Function SendMessageA Lib "user32" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Const LB_GETTOPINDEX = &H18EPublic Function GetIndex() As Long
        GetIndex = SendMessageA(List1.hwnd, LB_GETTOPINDEX, 0, 0)
    End Function调用此函数返回Index
      

  12.   

    Private Sub list1_Scroll()
         Dim nIndex as Long
         nIndex=GetIndex    '我给你的函数
         If nIndex<0 then   
              MessageBox "获取索引失败"
              Exit Sub
         end if
         If nIndex<>List1.ListIndex then  '如果获取的第一个条目与当前选定的不同才处理
              List1.ListIndex=nIndex
         end if
    End Sub