Combox的类型是0。我想在输入文本的时候,如果输入文本在下拉列表里的话,那么发送一个滚动消息,是打开下拉列表,并定位到和文本一致那一行。
    主要是我想返回listindex属性值,我发现如果用户必须用鼠标在下拉列表里选择才能正确返回listindex属性。如果是我那种,在combox的change方法里写,listindex属性返回都是-1,但打开下拉列表,发现光标确实定位到我需要那一行。所以只希望能找到符合条件那一行的同时,下拉列表也能同时打开,listindex属性能正确的返回。
    如果有更好的方法,还请大家多提意见,谢谢。

解决方案 »

  1.   

    很简单啊,在Change事件里,若找到符合条件那一行,则设置ListIndex为行号,并设置TopIndex为行号,至于打开下拉列表,用SendMessage,CB_SELECTSTRING消息
      

  2.   

    对,在Change事件里,若找到符合条件那一行,则设置ListIndex为行号
      

  3.   

    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Const CB_FINDSTRING = &H14C
    Combo1.ListIndex = SendMessage(Combo1.hwnd, CB_FINDSTRING, -1, ByVal CStr(Text1.Text))记住不会在combox1中输入,包括vb的属性框也是这样,是一个text1和一个command再加listbox构成你所说的那种情况.类似combox的情况,不注意根本不知道.
      

  4.   

    //主要是我想返回listindex属性值,我发现如果用户必须用鼠标在下拉列表里选择才能正确返回listindex属性。如果是我那种,在combox的change方法里写,listindex属性返回都是-1,但打开下拉列表,发现光标确实定位到我需要那一行。所以只希望能找到符合条件那一行的同时,下拉列表也能同时打开,listindex属性能正确的返回。你的问题只要自动打开下拉类表列表应该就可以了:Private 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 CB_SHOWDROPDOWN = &H14F在合适的地方使用下面的语句即可:
    SendMessage Combo1.hwnd, CB_SHOWDROPDOWN, 1&, ByVal 0&
       
      

  5.   

    呵呵,不小心写错了,楼上说的对,是CB_SHOWDROPDOWN