16. februar 2001 - 07:31Der er
7 kommentarer og 2 løsninger
\"HjælpeBox til DBComboBox\"
Jeg har en database med en masse navne i. Jeg kan så vælge et navn Via en DBComboBox Men jen vil gerne have det til at være sådan at, når jeg selv taster noget i DBComboBox\'ens tekstfelt, så kommer der en lille \"HjælpeBox\" frem med de navne der er = > det jeg har tastet ind. når jeg så klikker på et navn i \"HjælpeBox\'en\" så skal det sættes ind i DbComboBox\'en (DbComboBox.Text eller hvad det nu må hedde!!) Min Database Hedder Klub Og mit DataField hedder Klubnavn
Brug et dbedit felt istedet for en DbCombobox. Sæt samtidig en listbox lige under editfeltet og sæt dens visible property til false så man ikke kan se den.
I dbedit feltets OnChange event starter dun med listbox1.clear og derefter kalder du din database med \"select klubnavn from klub where klubnavn LIKE dbedit1.text+\"%\". og derefter if query1.recordcount > 0 then begin query1.first; while not query1.eof do begin listbox1.items.add(query1.fields[0].value); query1.next; end; listbox1.visible := true; end;
NB! linien table1.klubnavn := listbox1... forudsætter at feltet bag din dbedit1 er table1.klubnavn. Det er ikke nok at sætte dbedit1.text = listbox1...
du kan bruge 2 listboxe, listbox1 indeholder alle mulige navne og er usynlig, listbox2 placeres lige nedenunder din dbcombobox, med samme bredde, med alle mulige navne i til at begynde med, og usynlig.
procedure TForm1.ComboBox1Change(Sender: TObject); var i : integer; begin if combobox1.text <> \'\' then begin for i := listbox2.items.count - 1 downto 0 do begin if listbox2.items[i] < combobox1.text then begin listbox2.items.delete(i); end; end; listbox2.visible := true; end else begin listbox2.visible := false; listbox2.items.text := combobox1.items.text; end; end;
procedure TForm1.ListBox2Click(Sender: TObject); begin if listbox2.itemindex > -1 then begin combobox1.text := listbox2.items[listbox2.itemindex]; listbox2.visible := false; listbox2.items.text := combobox1.items.text; end; end;
procedure TForm1.ListBox2KeyPress(Sender: TObject; var Key: Char); begin if (key = #13) and (listbox2.itemindex > -1) then begin combobox1.text := listbox2.items[listbox2.itemindex]; listbox2.visible := false; listbox2.items.text := combobox1.items.text; end; end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if (key = #27) then begin listbox2.visible := false; listbox2.items.text := combobox1.items.text; end; end;
procedure TForm1.ComboBox1Exit(Sender: TObject); begin if activecontrol <> listbox2 then begin listbox2.visible := false; listbox2.items.text := combobox1.items.text; end; end;
så kan du sætte formens keypreview til True og bruge
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if (key = #27) then begin listbox2.visible := false; listbox2.items.text := combobox1.items.text; end; end;
til også at nulstille hjælpboxen når der trykkes escape
anold, det er fordi hatecaps laver en fejl. Alle de steder i eksemplet han har skrevet:
listbox2.items.text := combobox1.items.text;
skulle han istedet have skrevet
listbox2.items.text := listbox1.items.text;
således at han overfører alle navnene fra listbox1 til listbox2 efter at du har valgt et navn. I eksemplet sletter han alle de navne fra listbox2 der ikke passer med det du indtaster, men glemmer efterfølgende at sætte dem tilbage igen. Det skulle han gøre med den linie jeg har skrevet.
I øvrigt blander han det lidt mellem dbcombobox og alm. combobox, men i eksemplet er der ikke brug for en combobox. Han bruger alligevel ikke comboboksens faciliteter. Du kan derfor ligeså godt bruge et dbedit felt sådan som jeg skrev.
Ja du har ret i at hatecape blander det lidt mellem dbcombobox og alm. combobox men det \"problem\" har jeg løst. Nu har jeg byttet linjerne ud med dine men det ændre ikke noget ,min listbox2 er stadig tom når den bliver visible . jeg har lige prøvet at lade den være visible når jeg starter programmet og så er alle data der når jeg så trykker på min DBcomboBox forsvinder listbox\'en som den skal Men næste gang jeg skriver noget i DBComboBox\'en text felt så kommer listboxen frem igen men denne gang er den tom om jeg fatte hvad der sker !!!!
Sjensen jeg vil gerne holde fast i min DBcomboBox for at give brugeren mulighed for at vælge et navn direkte fra DBcomboBox\'en
Hallo igen. det ser ud til at jeg var for hurtig til at acceptere svarene. jeg har lige et lille problem med listbox2 når man F.eks taster S (Skanderborg) ind i DBcombobox\'en så finder Listbox2 alle de der starter med \"S\" men når man så taster der næste bogstav ind \"k\" ja så finder listbox2 alle dem der starter med T hvad skal vi gøre ved det ??
hmm, det lyder som om at skanderborg står med store bogstaver i listen. Da k er større end K kan den ikke vise SKANDERBORG hvis du taster Sk. Du kan lave if listbox2.items[i] < combobox1.text then om til if uppercase(listbox2.items[i]) < unppercase(combobox1.text) then så der ikke tages hensyn til store/små bogstaver
i øvrigt tak for hjælpen til sjensen, der kan man se hvad der sker når man skriver noget så tidligt på dagen :-)
Synes godt om
Ny brugerNybegynder
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.