Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Alle Listboxeinträge werden markiert...warum?? (https://www.delphipraxis.net/187322-alle-listboxeintraege-werden-markiert-warum.html)

Sugar 19. Nov 2015 13:45

Alle Listboxeinträge werden markiert...warum??
 
Hallo Forum,

ich kriege hier gerade Augen bis zum Bildschirm...

Ich lese aus einer Ini-Datei einen String und gebe ihn an die unten gezeiget Routine weiter.

Code:
procedure TForm1.MarkiereAps(Ap: string);
var I,
    C,
    P, {Position des Trennzeichens im Ini-Eintrag}
    Ix {Item Index der Listbox}: Integer;
  Item: string;
begin
  {z.B. AP= AP-1234;AP-3344;AP-8765}
  {Trennzeichen im String zählen}
  C := FindStrAndCount(AP, ';');

  For I := 0 to C do
  Begin

    {String zerlegen ...}
    P := pos(';', AP);

    { Item ist der Listboxeintrag der markiert werden soll}
    Item := copy(ap, 1, P-1 );

    { String kürzen }
    AP := copy(ap,P+1,length(AP));

    {Index des Eintrags ermitteln und Eintrag markieren}
    ix:= Listbox1.Items.IndexOf(Item);
    ListBox1.Selected[ix]:=true;
    //Application.ProcessMessages;
  end;
end;
Die Listbox wird im Vorfeld gefüllt. Markiert werden sollen nur die relevanten Einträge,die in der Variable AP übergeben werden. Komischwerweise werden beim erreichen des Endes der Schleife ALLE Einträge markiert, noch bevor die Prozedur verlassen wird.

Was kann das für eine ursache haben?

Vielen Dank für Hinweise.

nahpets 19. Nov 2015 14:00

AW: Alle Listboxeinträge werden markiert...warum??
 
Was passiert denn hier, wenn das Item nicht gefunden wird?
Delphi-Quellcode:
  ix:= Listbox1.Items.IndexOf(Item);
    ListBox1.Selected[ix]:=true;
Dann müsste ix doch -1 sein.
Was wird denn ausgewählt, wenn
Delphi-Quellcode:
ListBox1.Selected[-1]:=true;
gesetzt wird? (geht das überhaupt?)

Wie wäre es denn mit diesem hier?
Delphi-Quellcode:
  ix:= Listbox1.Items.IndexOf(Item);
   if ix <> - 1 then ListBox1.Selected[ix]:=true;
Was passiert denn mit den Einträgen, die vor dem Aufruf der Prozedur bereits markiert sind?

Korrekterweise müsste doch die Prozedur bei mehrfachem Aufruf mit unterschiedlichen Werten additiv sein.

Wäre es eventuell hilfreich, vorher alle bestehenden Markierungen aufzuheben?

Sugar 19. Nov 2015 14:20

AW: Alle Listboxeinträge werden markiert...warum??
 
Danke nahpets,

Ich bin noch in der Testphase, es ist derzeit unmöglich einen nicht vorhandenen Eintrag zu haben. Aber irgendwie passt was mit dem String nicht...
Dein Hinweis hat mich ein Stück weiter gebracht. Ich melde mich mal wenn ich das Problem gelöst habe.


Bis später und herzlichen Dank

Captnemo 19. Nov 2015 15:50

AW: Alle Listboxeinträge werden markiert...warum??
 
Sorry, vergiss diesen Post, ich war im falschen Thread ;)


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