[Gambas-user] Filtering listbox list
Shannon Kuchler
shannon at inflecto.org
Sun Mar 11 23:14:21 CET 2018
Thanks guys the Like "*" & TextBox4.Text & "*" did the trick. I know I still have a lot to learn and I really thank you guys for your patience
Shannon,
Did not actuallt try it but I guess that you could change the line:
If ListBox1[i].Text Like TextBox4.Text & "*" Then ' found another
To this to allow looking for letters/words not at the beginning:
If (ListBox1[i].Text Like ("*" & TextBox4.Text & "*")) Then ' found another
That is, prefix the search term with another asterisk. Parentheses are optional, of course, but they do clarify my own mind.
Risking being pedantic, I'd also suggest you use meaningful control and variable names. ListBox1 says nothing but lstAllOptions does. Same for TextBox4, it could be txtSearch, and ListBox6 could be lstFiltered. You'll thank me later when you revisit code some time from now. Been there, done that, regretted it big time.
Hope it helps,
zxMarce.
On Mar 11, 2018, at 18:04, Shannon Kuchler <shannon at inflecto.org <mailto:shannon at inflecto.org> > wrote:
This code works
Public Sub TextBox4_KeyRelease()Dim i As Integer
Dim l As Integer
i = (-1)
ListBox6.Clear
If TextBox4.Text = "" Then ListBox6.List = ListBox1.List
If TextBox4.Text <= " " Then Return ' not searchable
For l = 0 To ListBox1.List.Max
Inc i
If ListBox1[i].Text Like TextBox4.Text & "*" Then ' found another
ListBox6.Add(ListBox1[i].Text)
Endif
Next
end
I could not get it to work with out the "Inc i" perhaps I'm missing something there. Before it wasn't catching listbox1.index(0) so I had to add "i = (-1)"However it still need something because it only 1/2 works
for instance this is the data in listbox1
The Dying Lands
Bad Company
Valmod Expansion Pack
Valmod Overhaul Pack
Darkness Falls (BBP)
Starvation
War Of The Walkers 5.2 (BBP)
if I type "v" in textbox4 I get this output to listbox6 which I expected
Valmod Expansion Pack
Valmod Overhaul Pack
However if I type "t" in textbox4 I get this output to listbox6
The Dying Lands
I expected 't" to give me everything that had a 't' like this
The Dying LandsStarvationWar Of The Walkers 5.2 (BBP)
Good advice on using ListBox.List.Max.
I have found the KeyRelease event to be more reliable in regards to having access to the actual, current keystroke value.
And, instead of looping through List, I personally would simply use ListBox.Find.
--
Lee
On 03/11/2018 09:37 AM, Gianluigi wrote:
> Maybe you could use the KeyPress event with "If Key.Code = Key.Return Then ...",
> "Inc i" is useless and you should use ListBox1.List.Max (or ListBox1.count -1) instead of ListBox1.Count to avoid the 'out of
> bound' error.
>
> Regards
> Gianluigi
>
> 2018-03-11 10:33 GMT+01:00 Shannon Kuchler <shannon at inflecto.org <mailto:shannon at inflecto.org>>:
>
> __
>
>
>
> -I think I figured it out
>
>
> Public Sub TextBox4_KeyRelease()
> Dim i As Integer
> Dim l As Integer
>
> ListBox6.Clear
>
>
> If TextBox4.text > "z" Or TextBox4.text < " " Then Return
> For l = 0 To ListBox1.Count
> Inc i
> If ListBox1[i].Text Like TextBox4.Text & "*" Then ' found another
> ListBox6.Add(ListBox1[i].Text)
> Endif
> Next
>
> End
--------------------------------------------------
This is the Gambas Mailing List:
https://lists.gambas-basic.org/listinfo/user
Search the list:
https://lists.gambas-basic.org/cgi-bin/search.cgi
Hosted by https://www.hostsharing.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20180311/701e7b51/attachment.html>
More information about the User
mailing list