Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   TVCheckListbox und TStringList (https://www.delphipraxis.net/201273-tvchecklistbox-und-tstringlist.html)

Blackpit 6. Jul 2019 18:24

TVCheckListbox und TStringList
 
Hallo,
ich bin mit Delphi erst seit 8 Monaten am arbeiten, deshalb verzeiht meine Unwissenheit ;)
Folgende Fragen:
Was ist der Unterschied bei der TVCheckListbox zwischen
Delphi-Quellcode:
.Checked[i]
und
Delphi-Quellcode:
.State[i] = cbChecked
Wieso bringt mir
Delphi-Quellcode:
myselection.Find(TCheckListbox(Sender).Items[i],myKat)
keinen Wert im Debuger?
Wobei myselection eine interne Stringlist ist und der Event OnClickCheck einer Checklistbox im Form ausgelöst wurde.
Meine Intention ist, aus einer Checklistbox in einem Formular die markierten Einträge in einer internen Stringlist zu sammeln um sie anschließend in der DB zu speichern bzw.zu löschen.
Irgendwie gelingt mir das nicht, die Liste aktuell zu halten hier mein Versuch:
Delphi-Quellcode:
    begin
        myLst:= TCheckListbox(Sender).Name;
       if not assigned(myselection) then myselection := TStringList.create; //myselection.clear beim speichern
        begin
        myselection.Sort;
        TCheckListbox(Sender).Sorted := True;
          for i := TCheckListbox(Sender).Count-1 downto 0   do
//          if TCheckListbox(Sender).Checked[i] then
          if TCheckListbox(Sender).State[i] = cbChecked then
            begin
              if not (myselection.Find(TCheckListbox(Sender).Items[i],myKat)) then myselection.Add(TCheckListbox(Sender).Items[i]);
            end
            else
            if (myselection.Find(TCheckListbox(Sender).Items[i],myKat)) and (TCheckListbox(Sender).State[i] = cbUnChecked) then
                  myselection.Delete(TCheckListbox(Sender).ItemIndex);
        end;
    end;
Was mach ich falsch?

Luckie 6. Jul 2019 19:00

AW: TVCheckListbox und TStringList
 
Hat jetzt nichts direkt mit deinem Problem zu tun, aber ein paar Tipps zu deinem Code.

Das Erstellen der StringList innerhalb der Prozedur ist ungünstig, denn wo woird sie wieder frei gegeben? Ich fürchte, es ist eine globale Variable. Nicht schön. Erstelle die StringList in der aufrufenden Prozedure, über gib sie als Parameter und gib sie in der aufrufenden Prozedure wieder frei.

Warum arbeitest du mit dem Objekt Sender? Deine Routine sollte in einer Procedure liegen, die nichts mit den Steuerelementen zu tun hat:
Delphi-Quellcode:
Procedure DeleteCheckedItems(ChecklistBox: TVCheckListbox; MySelection: TStringList);
begin
  ...;
  ...;
end;
Das hilft auch bei der Fehlersuche.

Setz mal einen Haltepunkt mit F5 bei der ersten Anweisung und dann geh mal mit F7 Schritt für Schritt durch den Code. Springt er überhaupt in die Verzweiung?

Blackpit 6. Jul 2019 20:04

AW: TVCheckListbox und TStringList
 
Zitat:

Zitat von Luckie (Beitrag 1436183)
...
Warum arbeitest du mit dem Objekt Sender?...

Dachte es erklärt zu haben, ich will im OnClickCheck-Event der Checkbox das selektierte Objekt in eine interne Liste schreiben, deselektierte sollen wieder entfernt werden.
Am Ende wird beim speichern die Liste wieder freigegeben.
Meine Fragen wurden leider noch nicht beantwortet.

Gruß BP

Luckie 6. Jul 2019 20:39

AW: TVCheckListbox und TStringList
 
Hast du es denn inzwischen mal debuggt, wie beschrieben?

Ich würde dazu eine separate Schaltfläche benutzen. Das wird den Benutzer wohl auch weniger verwirren, nichts passiert während er noch mit der Listbox zu Gange ist.

Blackpit 6. Jul 2019 20:51

AW: TVCheckListbox und TStringList
 
Zitat:

Zitat von Luckie (Beitrag 1436192)
Hast du es denn inzwischen mal debuggt, wie beschrieben?
...

Deshalb ja meine Fragen.
Ich werd beim debuggen nicht schlau.
Und ja, ich habe früher in anderen Umgebungen schon entwickelt.
Ist mein Vorgehen in einer OO-Architektur so absonderlich?

P.S.: Bin ich vielleicht in der falschen Ecke? Dann bitte verschieben.

Luckie 6. Jul 2019 21:17

AW: TVCheckListbox und TStringList
 
Warum wirst du beim debuggen nicht schlau? Wurde der Code denn nach deinen Vorstellungen ausgeführt?

DP-Maintenance 6. Jul 2019 21:18

Dieses Thema wurde am "06. Jul 2019, 22:18 Uhr" von "Luckie" aus dem Forum "Programmieren allgemein" in das Forum "GUI-Design mit VCL / FireMonkey / Common Controls" verschoben.

Blackpit 6. Jul 2019 21:45

AW: TVCheckListbox und TStringList
 
Zitat:

Zitat von Blackpit (Beitrag 1436182)
...Wieso bringt mir
Delphi-Quellcode:
myselection.Find(TCheckListbox(Sender).Items[i],myKat)
keinen Wert im Debuger?...

Ich hab doppelte Einträge, daher liefert das wohl falsche Werte welche ich nicht überprüfen kann.

Luckie 6. Jul 2019 22:33

AW: TVCheckListbox und TStringList
 
Wie lautet denn der Rückabewert und was steht nachher in Muskat für ein Index?

Blackpit 7. Jul 2019 07:33

AW: TVCheckListbox und TStringList
 
Was meinst du mit
Zitat:

Zitat von Luckie (Beitrag 1436197)
...was steht nachher in Muskat für ein Index?

Was ist Muskat?
Der Rückgabewert sollte Bool sein, der Debuger zeigt mir aber nichts:shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 Uhr.
Seite 1 von 2  1 2      

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