Avatar billede aniels21 Nybegynder
22. oktober 2004 - 23:29 Der er 26 kommentarer og
1 løsning

"Kontinuerlig opdateret stringsøgning"

Hey boys (and girl)?

Jeg har brug for noget kode som kontinuerligt søger i en sorteret ArrayList og returnerer den string som kommer tættest på det, i en tekstbox, indtastede.

Altså, fra en ArrayList indeholdende følgende strenge:

Anders
Anita
Anne
Arne
Asker
Bo
Carl

returneres ved Indtastening af A i tekstboksen:

Anders
Anita
Anne
Arne
Asker

Og ved indtastning af det næste bogstav n returneres:

Anders
Anita
Anne

osv osv.
Det skal bruges således at, man i en tekstboks indtastes bogstaverne efterhånden. I en combobox vises så de mulige resultater.

Nogle gode ideer?
Avatar billede vigilante Nybegynder
22. oktober 2004 - 23:34 #1
Avatar billede aniels21 Nybegynder
22. oktober 2004 - 23:42 #2
Jo tak, det ser sgu fino ud. Jeg glemte nok at fortælle (DOH!) at jeg arbejder i compact framework, og der kan man ikke skrive direkte i en comboBox. :-(
Avatar billede vigilante Nybegynder
22. oktober 2004 - 23:49 #3
jeg har ikke kigget så meget på eksemplet, men mon ikke det er til at rippe lige den funktion du har brug for?
Avatar billede aniels21 Nybegynder
22. oktober 2004 - 23:50 #4
Ellers fuldstændig hvad jeg har brug for. Jeg har bare smidt en tekstboks oven i comboboxen, så man indtaster i tekstboxen og det er så det input som metoden skal lede efter i ArrayListen.
Avatar billede vigilante Nybegynder
22. oktober 2004 - 23:56 #5
Hvis du ikke selv kan rippe det, så vil jeg da gerne gøre forsøget for dig
Avatar billede aniels21 Nybegynder
23. oktober 2004 - 01:30 #6
Tak, det må du meget gerne. Jeg har forsøgt noget klam-kode her:

private void txtTEKSTFELT_TextChanged(object sender, System.EventArgs e)
//        {
//            OpdaterComboBox(txtTESKTFELT.Text);
//        }

private void OpdaterComboBox(string text)
//        {
//            cmbCOMBOBOX.Items.Clear();
//            ArrayList arr = ARRAYLIST MED OBJEKTER;
//            foreach(OBJEKT obj in arr)
//            {
//
//                if(obj.Navn.StartsWith(text))
//                {
//                    cmbCOMBOBOX.Items.Add(obj);
//                }
//            }
//        }

Kan ikke helt lure hvorfor det ikke virker. COMBOBOKS bliver godt nok tømt, men de ønskede ojekter bliver ikke tilføjet efterfølgende. Jeg håbede lidt at jeg kunne bruge StartsWith(string); til at finde de mulige objekter. Er det far-fetched?

Jeg kan godt se at mit kode (hvis du ellers kan lure hvad jeg vil) er noget mere primitivt end det eks. du sendte mig, men det ku være sjovt selv (næsten) at have lavet noget der virker.
Avatar billede aniels21 Nybegynder
23. oktober 2004 - 01:31 #7
Selvfølgelig er det ikke udkommenteret når jeg tester det :-D.
Avatar billede aniels21 Nybegynder
23. oktober 2004 - 01:33 #8
Og ud over det, så skal comboboxen ikke autocomplete, men kun vise de muligheder som er tilgængelige ud fra de indtastede bogstaver/den indtastede string i tekstboksen.

hvilket bringer mig til et nyt spørgsmål om hvorledes man "Aktiverer" comboboxen, så den er "rullet ned" med de mulige valg?

Jaa, mange spørgsmål, men det er også sent :-)
Avatar billede burningice Nybegynder
23. oktober 2004 - 02:37 #9
sikker på at StartsWith er en funktion der findes?
Avatar billede vigilante Nybegynder
23. oktober 2004 - 11:04 #10
hvorfor er det kun de mulige objekter der skal vises i comboboksen?

kan det ikke være en løsning at der bare filtreres på de mulige udfra hvad der tastes i tekstboksen?

I givet fald vil det være ret simpelt

Prøv at adde nogle items til din comboboks og så lave denne lille kode:

private void textBox1_TextChanged(object sender, System.EventArgs e)
        {
            OpdaterComboBox(textBox1.Text);
        }
        private void OpdaterComboBox(string tekst)
        {
           
            comboBox1.SelectedIndex=comboBox1.FindString(tekst);
        }
Avatar billede vigilante Nybegynder
23. oktober 2004 - 12:14 #11
hvis du vil have comboboksen til at være dropped down udvider du koden til

private void textBox1_TextChanged(object sender, System.EventArgs e)
        {
            OpdaterComboBox(textBox1.Text);
            comboBox1.DroppedDown=true;
        }
private void OpdaterComboBox(string tekst)
        {
           
            comboBox1.SelectedIndex=comboBox1.FindString(tekst);
        }
Avatar billede aniels21 Nybegynder
23. oktober 2004 - 16:18 #12
vigliante, jeg ligger lige på det senere, er på vej ud til de gamle for at hygge lidt med dem.

cyberfessor> Yup, den returnerer en bool, så jeg burde kunne bruge den i en if(), men jeg kan sguit få det til at spille for mig.
Avatar billede aniels21 Nybegynder
25. oktober 2004 - 09:45 #13
så'r vi på banen igen. Jeg ved ikke om det er meningen at man selv skal kode FindString(tekst) selv, den findes i hvert tilfælde ikke.

Nogen der har erfaring med brug af StartsWith()?
Avatar billede aniels21 Nybegynder
25. oktober 2004 - 09:45 #14
NB: Jeg bruger compact framework.
Avatar billede vigilante Nybegynder
25. oktober 2004 - 09:52 #15
findstring findes i det almindelige framework...men jeg er ikke bekendt med compact framework.

Hvordan laver jeg et projekt i compact framework? så skal jeg kigge på det igen.
Avatar billede aniels21 Nybegynder
25. oktober 2004 - 10:03 #16
Jeg bruger VS 2003 hvor man kan oprette et Smart Device Application, så bruger den automatisk Compact Framework. Jeg skal indrømme at jeg ikke aner hvordan man evt. kunne gøre det i tidligere versioner.
Avatar billede vigilante Nybegynder
25. oktober 2004 - 10:35 #17
ok, jeg kigger på det, har også vs 2003.
Avatar billede aniels21 Nybegynder
25. oktober 2004 - 10:37 #18
:-)
Avatar billede vigilante Nybegynder
25. oktober 2004 - 10:49 #19
må vel hellere høre dig om det er en pocket pc eller windows ce application du er ved at lave, hvis der også skulle være forskel der =)
Avatar billede aniels21 Nybegynder
25. oktober 2004 - 10:51 #20
Det er Pocket PC, jeg ved faktisk heller ikke om der er forskel der
Avatar billede vigilante Nybegynder
25. oktober 2004 - 12:10 #21
ok aniels21, her er hvad jeg er kommet frem til:

Jeg ved ikke hvor du laver din arraylist, men det formoder jeg du selv har styr på :)

Jeg lavede et til test formålet på selve form klassen så den var public

public ArrayList arr = new ArrayList();

Derpå lavede jeg følgende på formload for at have nogle navne i arrylisten

arr.Add("Bente");
arr.Add("Birthe");
arr.Add("Børge");
arr.Add("Flemming");
arr.Add("Julie");
arr.Add("Maren");
arr.Add("Tanja");
arr.Add("Valdemar");
arr.Add("Viktor");

Den eneste anden kode du skal bruge er følgende:

private void textBox1_TextChanged(object sender, System.EventArgs e)
{
    comboBox1.Items.Clear();
    foreach(String persons in arr)
        {
            String arrname ="";
            arrname = persons.ToLower();
            if ( arrname.StartsWith(textBox1.Text.ToLower()))
                {
                    comboBox1.Items.Add(persons);
                       
                }
        }
}

Hvis du skriver B eller b får du alle der starter med B og b, osv addet til din combobox

Jeg kan ikke se du kan få comboboksen til at droppe ned, da det åbenbart ikke er muligt i compact framework.

Men dette burde da opfylde dit oprindelige spørgsmål.

Ellers spørger du bare igen
Avatar billede vigilante Nybegynder
25. oktober 2004 - 12:11 #22
Glemte lige at sige det er testet både med Pocket Pc 2002 Emulator samt Windows CE 2002 Emulator og virkede begge steder.
Avatar billede aniels21 Nybegynder
25. oktober 2004 - 12:50 #23
Yup, thx det virker. Jeg synes egentliget at det ligner min oprindelige kode ret meget:

              cmbCOMBOBOX.Items.Clear();
//            ArrayList arr = ARRAYLIST MED OBJEKTER;
//            foreach(OBJEKT obj in arr)
//            {
//
//                if(obj.Navn.StartsWith(text))
//                {
//                    cmbCOMBOBOX.Items.Add(obj);
//                }
//            }
Bortset fra at jeg kalder en metode, og du kører det direkte i TextChanged-eventen.
Mærkeligt det gør en forskel, men det gør det jo :-) .

Lidt en skam at comboboxen ikke kan være dropped down, det var lidt en del af ideen. Men måske jeg kan lave noegt fusk med en listbox under comboboxen :-D

Smid lige et svar så du kan få nogle points.
Tak for hjælpen :-)
Avatar billede vigilante Nybegynder
25. oktober 2004 - 14:37 #24
værsågod =) Glad for at kunne hjælpe lidt
Avatar billede vigilante Nybegynder
25. oktober 2004 - 14:41 #25
og ja det ligner din kode meget, og du kunne såmænd sagtes have kaldt en metode, jeg tror forskellen er at du prøver at adde  obj, mens det vel burde være obj.Navn?
Avatar billede aniels21 Nybegynder
26. oktober 2004 - 11:39 #26
Jooe, men jeg tester jo på obj.Navn, og smider så obj i comboboxen. Det virker andre steder, altså at smide objekter i comboboxen.
Avatar billede vigilante Nybegynder
26. oktober 2004 - 21:46 #27
ok, så kan jeg ikke forklare det, men nu har du da noget der kører
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester