VB3 How to Quickly Search a List Box

Last reviewed: January 9, 1997
Article ID: Q119738
The information in this article applies to:
  • Professional Edition of Microsoft Visual Basic for Windows, version 3.0

SUMMARY

A popular item in a user interface is to "link" a text box to a list box so that as the user types text into the text box, the nearest match in the list box is selected. Although this technique can be implemented fairly easily using pure Visual Basic code, the Windows API provides a quick and easy way of doing this.

MORE INFORMATION

This technique uses the LB_FINDSTRING message for a list box to locate a partial match for a string in a list box. To do this, call the Windows API SendMessage function. The SendMessage function requires the following parameters to list the files:

   SendMessage (hWnd%,LB_FINDSTRING, wParam%, lparam)

where

   hWnd%     is the hWnd of the list box.
   wParam%   is an integer that specifies the starting point for the
             search. Use -1 to search the whole list box.
   lParam    is a long pointer to the string to find.

Example to Demonstrate Searching a List Box

  1. Start a new project in Visual Basic and add a text box (Text1) and a list box (list1) to Form1.

  2. Add the following code to the General declarations section of Form1:

    ' Enter the Declare statement on one single line:

       Declare Function SendMessage Lib "user" (ByVal hwnd As Integer,
          ByVal wMsg As Integer, ByVal wp As Integer, lp As Any) As Long
         Const WM_USER = &H400
       Const LB_FINDSTRING = (WM_USER + 16)
    
    

  3. In the Form_Load method for the form, add a few items to the list box using the following code:

       Sub Form_Load()
           List1.Clear
           List1.AddItem "Apples"
           List1.AddItem "Banana"
           List1.AddItem "Bread"
           List1.AddItem "Break"
       End Sub
    
    

  4. In the Change method of the text box, add the following code:

       Sub Text1_Change()
           ' The following code should be on one single line:
         List1.ListIndex = SendMessage(List1.hWnd, LB_FINDSTRING, -1, ByVal
         Cstr(Text1.Text))
       End Sub
    
    
When the code runs, typing text into the text box will select the first item in the list that matches the text in the text box.


KBCategory: kbprg kbcode
KBSubCategory: APrgDataAcc
Additional reference words: 3.00


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: January 9, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.