Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: Visual Basic
Expertise: Beginner
Aug 6, 1997

List Box Cumulative Search

By default, VB list boxes use any keyboard input to find the first item beginning with the pressed letter. Where the number of items in a list box is large (>100), this is not helpful. Substituting a binary or hybrid search for the sequential search below speeds up the algorithm substantially for very large lists (>1000 items). The code below searches the items in a sorted list box based on all the characters typed by the user:

 
Global ListBoxSearch$

Sub ListBox_KeyPress (KeyAscii As _
        Integer)
        'Return KeyAscii in case you 
        'want VB to handle certain chars
KeyAscii = SearchListBox_
        (Me.ActiveControl, KeyAscii)
End Sub

Function SearchListBox _
        (CurrentActiveControl As Control, _
        KeyAscii As Integer)
        Dim ListBoxIndex As Integer
        Dim Result As Integer                   
'Result of string compare

        ListBoxSearch$ = ListBoxSearch$ & _
                Chr$(KeyAscii)
        ListBoxIndex = CurrentActive_
                Control.ListIndex
 While ListBoxIndex < CurrentActive_
        Control.ListCount
        Result = StrComp(UCase$(List_
                BoxSearch$), UCase$(Left$_
                (CurrentActiveControl.List_
                (ListBoxIndex), Len(ListBox_
                Search$))))

         If Result <= 0 Then
                 CurrentActiveControl.List_
                        Index_= ListBoxIndex
                 SearchListBox = 0
                 Exit Function
         End If
         ListBoxIndex = ListBoxIndex + 1
 Wend
 ListBoxIndex = CurrentActive_
        Control.ListCount - 1
 CurrentActiveControl.ListIndex_
         = ListBoxIndex
 SearchListBox = 0
End Function





Note: Clearly, the code above is not complete and needs to be augmented to suit the individual developer. For example, when to clear ListBoxSearch$ is a subject of much consideration (active control changes, user presses arrow keys, and so forth) I implemented the above scheme on a list of >1500 items with a separate ClearLBSearch subroutine and a binary/sequential hybrid searching algorithm.

Joe Wilson
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date