Possible to search through a listbox?

I was wondering, i have a textfield and a listbox.

I want to search this listbox, but not from the first letter. This is becouse i have the Customer ID first, and the user should be able to write in f.eks Jimbo in the textfield, and the listbox automatically jumps down to jimbo EVEN though in the listbox it said "12 Jimbo" where 12 is the customer ID

I have a code for finding the name without the customer ID in front, but it doesnt work when i use the customer ID

Anyone have an idea?
Dim i As Integer = Me.listkunde.FindString(Me.txtkundesok.Text)
 
   
        Me.listkunde.SelectedIndex = i

Open in new window

LVL 3
leeds2000Asked:
Who is Participating?
 
gnoonConnect With a Mentor Commented:
If the input is 'f.eks Jimbo', the code above will use the all letters to search an item. So, nothing's found.
You need to split the search text and find for each 'f.eks' or 'Jimbo'.
Function FindString(ByVal list As ListControl, ByVal searchText As String) As Integer
	Dim i As Integer
	For i=0 To list.Items.Count-1
		If list.Items(i).ToString().ToLower().IndexOf(searchText.ToLower()) Then Return i
	Next
	Return -1
End Function
 
Private Sub txtkundesok_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtkundesok.TextChanged
	Dim split As String() = txtkundesok.Text.Split(New [Char]() {" "c})
 
	Dim i As Integer = -1
	Dim s As String
	For Each s In split
		If s.Trim() <> "" Then
			i = FindString(listkunde, s)
			If i <> -1 Then Exit For
		End If
	Next s
 
	If i <> -1 Then
		listkunde.SetSelected(i, true)
	Else
		listkunde.SelectedIndex = -1
	End If
End Sub

Open in new window

0
 
gnoonCommented:
You may need to create you own FindString() function.
Function FindString(ByVal list As ListControl, ByVal searchText As String) As Integer
	Dim i As Integer
	For i=0 To list.Items.Count-1
		If list.Items(i).ToString().IndexOf(searchText) Then Return i
	Next
	Return -1
End Function

Open in new window

0
 
leeds2000Author Commented:
Ugh, i really stink at functions, how do i now place this inside a button :)
0
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
gnoonCommented:
Place it in you class, then call it from another function.
Sub button1_Click(sender As Bbject, e As EventArgs)
	listkunde.SelectedIndex = FindString(listkunde, txtkundesok.Text)
End Sub

Open in new window

0
 
leeds2000Author Commented:
It only picks the top name, even i write f.eks "Jimbo" in the textfield: and there is a name called jimbo in the list (12 Jimbo Jumbo 98764556) last one is phone number and first number is customer ID

i placed my code in the

    Private Sub txtkundesok_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtkundesok.TextChanged

so it would search when i write, but he only marks the top, and doesnt seem to find anything
0
 
leeds2000Author Commented:
It still just selects the top name when trying to search for "jimbo" which in middle, no search seems to work.

I did manage to get the search to mark the second line though when i wrote the number "1" but thats about it.

I dont understand why the search aint working :/
0
 
gnoonConnect With a Mentor Commented:
I'm sorry leeds2000. The FindString should be below code.
    Function FindString(ByVal list As ListBox, ByVal searchText As String) As Integer
        Dim i As Integer
        For i = 0 To list.Items.Count - 1
            If list.Items(i).ToString().ToLower().IndexOf(searchText.ToLower()) <> -1 Then Return i
        Next
        Return -1
    End Function

Open in new window

0
 
leeds2000Author Commented:
Thanks, worked great :D
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.