Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ListBox.ItemIndex ! (https://www.delphipraxis.net/112788-listbox-itemindex.html)

Delphiturbo 27. Apr 2008 11:02


ListBox.ItemIndex !
 
Hallo
mit dem Code kann man in ListBoxsuchen
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
const
  indexStart = -1;
var
  search : array[0..128] of Char;
begin
  //make sure Length(Edit1.Text) <= 128
  StrPCopy(search, Edit1.Text) ;
  ListBox1.ItemIndex := ListBox1.Perform(LB_SELECTSTRING, indexStart, LongInt(@search)) ;
end;
ich wollte nun weitersuchen durch ein Button
Delphi-Quellcode:
// was soll ich ändern, damit ich weiter in ListBox nach unten weitersuchen kann :
procedure TForm1.Button1Click(Sender: TObject);
const
  indexStart = -1;
var
  search : array[0..128] of Char;
begin
  //make sure Length(Edit1.Text) <= 128
  StrPCopy(search, Edit1.Text) ;
  //ListBox1.ItemIndex := ListBox1.Perform(LB_SELECTSTRING, indexStart, LongInt(@search)) ;
  ListBox1.ItemIndex := ListBox1.Perform(LB_SELECTSTRING, indexStart, LongInt(@search)) ;
end;

grenzgaenger 27. Apr 2008 11:07

Re: ListBox.ItemIndex !
 
pauschal würd ich sagen, die variable indexstart auf den aktuellen index oder aktuellen index +1 setzen. dann sollte es mit den weitersuchen funzzen.

<HTH> GG

Delphiturbo 27. Apr 2008 11:33

Re: ListBox.ItemIndex !
 
Danke! Stimmt :)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  search : array[0..128] of Char;
  indexactuell : integer;
begin
indexactuell := Listbox1.Itemindex;

  //make sure Length(Edit1.Text) <= 128
  StrPCopy(search, Edit1.Text) ;
  ListBox1.ItemIndex := ListBox1.Perform(LB_SELECTSTRING, indexactuell, LongInt(@search)) ;
  indexactuell := indexactuell + 1;
end;

SirThornberry 27. Apr 2008 11:38

Re: ListBox.ItemIndex !
 
Könntest du deinem Beitrag bitte einen aussagekräftigen Titel geben?

Matze 27. Apr 2008 11:43

Re: ListBox.ItemIndex !
 
Überlege doch mal, was du da überhaupt machst:

Zitat:

Zitat von Delphiturbo
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  // ...
  indexactuell : integer;
begin
  indexactuell := Listbox1.Itemindex;
  // ...
  ListBox1.ItemIndex := ListBox1.Perform(LB_SELECTSTRING, indexactuell, LongInt(@search)) ;
  indexactuell := indexactuell + 1;
end;

Du setzt zu Beginn der Prozedur jedesmal indexactuell (tolles deutsch übrigens) auf den Item-Index, wozu inkrementierst du es dann am Ende? Die Lebensdauer der lokalen Variablen ist nach Abarbeiten der Prozedur zu Ende.

Schreibe es doch einfach so, das ist kürzer, logischer und übersichtlicher:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  search : array[0..128] of Char;
begin
  //make sure Length(Edit1.Text) <= 128
  StrPCopy(search, Edit1.Text) ;
  ListBox1.ItemIndex := ListBox1.Perform(LB_SELECTSTRING, Listbox1.ItemIndex, LongInt(@search)) ;
end;

DeddyH 27. Apr 2008 12:35

Re: ListBox.ItemIndex !
 
Wieso eigentlich so umständlich. Erfüllt IndexOf() nicht denselben Zweck?

marabu 27. Apr 2008 12:42

Re: ListBox.ItemIndex !
 
Hallo,

zum Suchen in einer ListBox gab es mal einen Thread: Suchfunktion ListBox

Grüße vom marabu

SirThornberry 27. Apr 2008 13:04

Re: ListBox.ItemIndex !
 
Zitat:

Zitat von DeddyH
Wieso eigentlich so umständlich. Erfüllt IndexOf() nicht denselben Zweck?

laut msdn nicht. Bei IndexOf muss der gesamte Eintrag gefunden werden. Bei dieser Variante nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 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