Volledige versie bekijken : VB.NET TextChanged Sub



Y-Ssin
25 April 2010, 19:15
Ik ben bezig met een progje te schrijven in vb, nu wil wil ik ergens in mijn prog kunnen zoeken via een textchanged en de resultaten in een listbox weergeven. Er worden dan gegevens uit een database gehaald in een aparte klasse via sql code: ... Like ... '%"
dit is mijn sub:



Private Sub txtZoekgebruiker_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtZoekgebruiker.TextChanged

Dim g As New Gebruikers
g.tezoeken = txtZoekgebruiker.Text
g.zoekgebruiker()
lsbGebruikers.DataSource = g.zoekgebruiker

End Sub
alles gaat goed als ik bezig ben met de eerste letters te schrijven, maar als ik backspace gebeurt er nix, alle resultaten blijven er staan, en als ik backspace tot er nix meer in de textbox staat, dan komen gewoon alle resultaten te staan in die listbox.
Weet iemand hoe ik dit kan oplossen?

ultddave
25 April 2010, 21:33
Probeer dit anders eens;


Private Sub txtZoekgebruiker_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtZoekgebruiker.TextChanged

Dim g As New Gebruikers
Me.txtZoekgebruiker.Text = Me.txtZoekgebruiker.Text.Trim(Chr(8))
g.tezoeken = txtZoekgebruiker.Text
g.zoekgebruiker()
lsbGebruikers.DataSource = g.zoekgebruiker

End Sub


PS: Als je debugged -> wordt alle code uitgevoerd bij het drukken van een backspace?

Mvg,
Dave

Y-Ssin
25 April 2010, 23:03
Ik ben niet zeker wat je bedoelt met die van die backspace, maar nee, ik heb nix geprogrammeerd met een backspace
btw: bedankt, dit werkt al deels.
als ik "ga" tijp krijg ik twee resultaten:
Gassa
Gabriël
tijp ik "gas" op "gab" krijg ik maar een van de twee, dit is wat ik wou.
Nu nog één ding, als ik zoveel backspace dat de textbox leeg is wil ik die listbox leeg hebben. Nu is die in dat geval dan nog altyd vol....
ps: kben benieuw, wat zegt die chr(8) ?

ultddave
25 April 2010, 23:28
Je zal waarschijnlijk weten dat een string gewoon een array van characters is? Ook dingen zoals: spaties, enters (carriage return/linefeed) zijn karakters. De backspace dus ook. De backspace is ASCII karakter 8. ;)

De code:
Me.txtZoekgebruiker.Text = Me.txtZoekgebruiker.Text.Trim(Chr(8))

Verwijdert dus alle backspaces uit de string (door middel van de trim functie).


Nu nog één ding, als ik zoveel backspace dat de textbox leeg is wil ik die listbox leeg hebben. Nu is die in dat geval dan nog altyd vol....

Op voorwaarde dat 'g.zoekgebruiker' een lege datasource is bij het aanmaken van een nieuwe 'Gebruikers',,, zou dit moeten werken:


Dim g As New Gebruikers
Me.txtZoekgebruiker.Text = Me.txtZoekgebruiker.Text.Trim(Chr(8))
if(Me.txtZoekgebruiker.Text.length > 0) Then
g.tezoeken = txtZoekgebruiker.Text
g.zoekgebruiker()
EndIf
lsbGebruikers.DataSource = g.zoekgebruiker


Opzich heeft het weinig nut om queries uit te voeren als de text lengte 0 heeft. Want dan weet je 100% zeker dat je een lege datasource moet gebruiken. ;)

PS: De functie "Chr" zet een integer waarde (ASCII) om naar het bijhorende karakter. ;) Typecasting dus. ;)

Mvg,
Dave