Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListBox (https://www.delphipraxis.net/76418-listbox.html)

cherry 4. Sep 2006 10:04


ListBox
 
Hi..

Ich will überprüfen ob der Eintrag den ich in die ListBox eintragen will,
schon vorhanden ist.

Dazu habe ich mir mal folgendes zurechtgelegt:

Delphi-Quellcode:
  for i:= 1 to ListBox3.Items.Count do
  begin
   if (ListBox3.Items.ValueFromIndex[i] = Edit2.Text) then
    ShowMessage('Strasse schon ausgewählt...')
   else
    ShowMessage(ListBox3.Items.ValueFromIndex[i]);
  end;
Leider funktioniert dies nicht!
Folgendes Szenario habe ich debugt:

Ich füge einen Eintrag ein z.B. 'asdf'
Die Schleife durchläuf nicht, weil die ListBox noch leer ist, also Items.Count = 0

Dann füge ich nochmals 'asdf' ein.
Die schleife wird einmal durchlaufen, weil Items.Count = 1

Komisch ist jetzt, das das Naximum des ListenIndexes(1) überschritten wurde (laut Fehlermeldung)
und warum ist jetzt i = 256 und nicht i = 1 wie das eigentlich sein müsste...

Naja, das stellt sich sicherlich bald heraus, bin schon gespannt!

_frank_ 4. Sep 2006 10:12

Re: ListBox
 
warum nicht

Delphi-Quellcode:
if (Listbox1.items.indexof(edit1.text)=-1) then
  Listbox1.items.add(edit1.text);
wenn du lieber die einzelnen einträge durchgehen willst (z.B. wegen Groß/Kleinschreibung) musst du bedenken, dass das erste item den Index 0 hat.

Delphi-Quellcode:
function EntryExists(items:TStrings;Text:string):boolean;
var i:integer;
    lc:string;
begin
  result:=false;
  lc:=AnsiLowerCase(Text);
  for i:=0 to items.count-1 do
  begin
    if lc=AnsiLowerCase(items.strings[i]) then result:=true;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not entryexists(Listbox1.items,edit1.text) then
    Listbox1.items.add(edit1.text);
end;
Gruß Frank

mkinzler 4. Sep 2006 10:13

Re: ListBox
 
Ist der gesuchte Wert komplett identisch mit den werten in der Liste? dann kannst du das mit .IndexOf machen und kannst die die Schleife sparen.

Steve 4. Sep 2006 10:14

Re: ListBox
 
Hi,

der Index ist 0-basiert, beginnt also nicht bei 1, sondern bei 0.
Entweder for i:=0 to ...count-1 oder ...[i-1]

Schau Dir mal Delphi-Referenz durchsuchenIndexOf an :)

cherry 4. Sep 2006 10:18

Re: ListBox
 
Vielen Dank euch allen...
Ich glob ich nehm dann die kürzere Variante :-D

THX


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz