Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Entfernen von Items aus TListBox erläuterung
Xearox - Mi 01.06.11 11:47
Titel: Entfernen von Items aus TListBox erläuterung
Hab hier folgenden Code im Internet gefunden und auf meine Bedürfnisse umgeschrieben
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm2.LB_Aus_ArtikelDblClick(Sender: TObject); var i: Integer; begin with LB_Aus_Artikel do begin i := 0; while (i <= Items.Count - 1) and (SelCount > 0) do begin while (i <= Items.Count - 1) and Selected[i] do Items.Delete(i); inc(i); end; ArtikelAnz:=ArtikelAnz - 1; end; end; |
Jedoch habe ich Keine Ahnung, was da nun überhaupt passiert.
Hintergrund der Geschichte, durch Doppelklick auf ein Item in einer Liste, soll der Eintrag entfernt werden, dies passiert aber nur, wenn in der Komponente MultiSelect Aktiviert ist, aber das ist nicht schlimm, so kann man auch mehrere Artikel entfernen, doch die Frage ist hier, wieso?
Vielen Dank erstmal
Gruß Christopher
Edit: Ich habe mal selber versucht aus einer anderen Liste einen Eintrag zu entfernen, und hab daher nur einen weiteren Eintrag gemacht: LB_Aus_ArtikelAnz.items.delete(i);
Jetzt funktioniert das auch das löschen aus einer anderen Liste, das war vorher hier eine Frage, wie man das macht.
| Zitat: |
das war der alte Text
Das Nächste ist, wie dieser Code arbeitet.
Hintergrund davon, ich würde gerne, in diesem Code einfügen, das auch aus einer anderen Liste ein Item entfernt wird, dieses Item gehört aber zu dem anderen Artikel in der anderen Liste.
Bedeutet:
Liste 1 ---- Liste 2
200 -------- Kugelschreiber
Bedeutet, in dem Code oben möchte ich gerne auch einarbeiten, das gleichzeitig der Eintrag aus Liste 1 gelöscht wird, wenn man doppel Klick auf Liste 2 Item macht.
Und aus diesem Grund wäre es gut, wenn ich den Code, der Oben steht, erklärt bekomme, dann kann ich ggf. auch selber das ein Arbeiten.
Ich denke das dies Eine Frage ist und das ich nicht extra dafür noch einen Thread auf machen muss, weil es hier ja lediglich um eine Erläuterung des Oben genannten Codes geht.
|
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 01.06.2011 um 12:52
Narses - Mi 01.06.11 12:13
Moin!
Xearox hat folgendes geschrieben : |
| Jedoch habe ich Keine Ahnung, was da nun überhaupt passiert. |
Das wundert mich nicht, ich hab mir das auch mehrmals ansehen müssen. :lupe: :gruebel: :?
Vor allem, weil ich das so gemacht hätte: :idea: ;)
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.ListBox1DblClick(Sender: TObject); begin ListBox1.DeleteSelected; end; |
Funktioniert auch unabhängig von Multiselect. :D
Xearox hat folgendes geschrieben : |
Hintergrund davon, ich würde gerne, in diesem Code einfügen, das auch aus einer anderen Liste ein Item entfernt wird, dieses Item gehört aber zu dem anderen Artikel in der anderen Liste.
[...]
Bedeutet, in dem Code oben möchte ich gerne auch einarbeiten, das gleichzeitig der Eintrag aus Liste 1 gelöscht wird, wenn man doppel Klick auf Liste 2 Item macht. |
Das hört sich so an, also ob du die Datenhaltung in der GUI machst - das ist immer ein schwerer Design-Fehler und wird früher oder später zu großen Problemen im Code führen. :hair:
Ansatz: Halte die Daten z.B. als Objekte in einer TObjectList. Wenn ein Datensatz gelöscht wird, dann entfernst du ihn aus der Objekt-Liste und füllst einfach nur die GUI-Controls neu mit den Referenzen. Das ist zwar etwas Overhead, aber wenn es nicht zigtausende Objekte sind, dann ist das performant genug. Vorteil: du hast keine Abhängigkeiten in der GUI zu beachten. :idea:
cu
Narses
//EDIT: Oh, du hast deinen Beitrag oben gekürzt, vorhin stand da noch mehr. :gruebel:
Xearox - Mi 01.06.11 12:47
Wie mit Narses per PN besprochen hab ich hier nun das gesamte Programm inkl. Excel Dummy Tabelle ohne vertrauliche Daten.
Damit kann man nun auch was mit meinem Code anfangen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!