本帖最后由 bcrun 于 2010-08-11 14:17:29 编辑

解决方案 »

  1.   

    你应该把'SendMessage Combo1.hWND, CB_SHOWDropDOWN, 1, ByVal 0&
    放到 Do Until rs.EOF...loop的下面 这个也可以用SendKeys "{F4}" 
      

  2.   

    我以前做过一个类似的,使用TextBox+ListBox控件组合,在文本框中输入数字,使用Sql的模糊查询来填写ListBox,功能和楼主的一样。
      

  3.   

    If rs.RecordCount > 0 Then
        SendMessage Combo1.hWnd, &H14F, False, ByVal 0& '在收起状态下添加项
        '……
        If SendMessage(Combo1.hWnd, &H157, 0, ByVal 0&) = 0 Then
            SendMessage Combo1.hWnd, &H14F, True, ByVal 0&
        End If
    Else
        Combo1.Clear
    End If
    不过每change一次还是会下拉,这无法避免
      

  4.   

    [Quote=引用 4 楼 king06 的回复:]
    VB code
    If rs.RecordCount > 0 Then
        SendMessage Combo1.hWnd, &H14F, False, ByVal 0& '在收起状态下添加项
        '……
        If SendMessage(Combo1.hWnd, &H157, 0, ByVal 0&) = 0 Then
            Send……
    [/Quo
    这样写,输入一位时,组合框的文本区域清空了,没法输两位
      

  5.   

    1)你自己有引发 Combo1_Change() 当然会多出来不必要的刷新了。
    上个帖子中教过你如何处理事件重入。2)先发送 CB_GETDROPPEDSTATE 判断下拉表是否已经显示,没有显示才发送 CB_SHOWDROPDOWN。
      

  6.   

    3)还有循环 RemoveItem 会多次刷新,Clear 只刷新一次。