Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TListBox Item Löschen
Xearox - Fr 03.06.11 13:44
Titel: TListBox Item Löschen
Mahlzeit zusammen,
folgendes Problem, habe mein Programm bis auf eine ganz kleine Sache, fertig.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| 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); ArtikelAuswahl[i].Ind:=''; ArtikelAuswahl[i].Anzahl:=''; ArtikelAuswahl[i].Name:=''; LB_Aus_ArtikelAnz.items.delete(i); inc(i); end; ArtikelAnz:=ArtikelAnz - 1;
end; end; |
Der code soll folgendes bewirken.
Doppel klick auf einen Artikel, Artikel wird aus liste gelöscht.
Links neben der Artikelliste ist eine weitere liste, welche die Stückzahlen enthält.
Dort soll auch der Eintrag gelöscht werden. Jedoch löscht er immer mehr als er soll.
Wenn ich nun 13 Artikel in der liste habe, und lösche den 13. Artikel, dann wird links in der Stückzahlliste genau 7 Einträge rausschmissen.
Ich weiß mir leider keinen Rat mehr, woran das liegen könnte.
Weiß jemand von euch, wie ich das am besten lösen kann?
Gruß Chris
jaenicke - Fr 03.06.11 13:50
Wenn du Einträge löschen willst, musst du von hinten anfangen oder i nur erhöhen, wenn du nicht gelöscht hast...
Überlege einmal selbst:
Du bist bei Eintrag 0, löschst den und erhöhst i. Welchen Eintrag prüfst du jetzt als nächstes? Den an Position 1... Und was ist mit dem, der jetzt an Position 0 ist?
Zudem hast du den Quelltext falsch eingerückt, da fehlt wohl ein begin..end...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| 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); ArtikelAuswahl[i].Ind:=''; ArtikelAuswahl[i].Anzahl:=''; ArtikelAuswahl[i].Name:=''; LB_Aus_ArtikelAnz.items.delete(i); inc(i); end; ArtikelAnz:=ArtikelAnz - 1; end; end; |
Xearox - Fr 03.06.11 13:54
jetzt wo du es sagst, stimmt, hab ein begin vergessen und natürlich ein end;
aber dennoch funktioniert es nicht.
der löscht immer noch mehr als nur ein item...
jaenicke - Fr 03.06.11 13:59
Ich verstehe auch den Aufwand nicht wirklich... :gruebel:
Was spricht dagegen es ganz einfach so zu machen?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm2.LB_Aus_ArtikelDblClick(Sender: TObject); var CurrentIndex: Integer; begin CurrentIndex := LB_Aus_Artikel.ItemIndex; if CurrentIndex >= 0 then begin LB_Aus_ArtikelAnz.Items.Delete(CurrentIndex); LB_Aus_Artikel.Items.Delete(CurrentIndex); ... end; end; |
Xearox - Fr 03.06.11 14:01
weil ich das ausm internet hatte den code.
und ich vorher damit noch garnicht gearbeitet habe.
Narses - Fr 03.06.11 14:03
Moin!
jaenicke hat folgendes geschrieben : |
| Ich verstehe auch den Aufwand nicht wirklich... :gruebel: |
Er hat Multiselect aktiviert, dann kann es mehr als ein markiertes Item geben. :idea: ;)
Vorschlag:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm2.LB_Aus_ArtikelDblClick(Sender: TObject); var i: Integer; begin for i := LB_Aus_Artikel.Count -1 downto 0 do if LB_Aus_Artikel.Selected[i] then begin LB_Aus_Artikel.Items.Delete(i); LB_Aus_ArtikelAnz.Items.Delete(i); end; end; |
cu
Narses
jaenicke - Fr 03.06.11 14:13
Meinst du wirklich, dass er das möchte?
Xearox hat folgendes geschrieben : |
Der code soll folgendes bewirken.
Doppel klick auf einen Artikel, Artikel wird aus liste gelöscht. |
:zwinker:
Abgesehen davon bezweifle ich, dass bei Multiselect in OnDblClick noch andere markiert bleiben. :gruebel:
Narses - Fr 03.06.11 14:16
Moin!
jaenicke hat folgendes geschrieben : |
Meinst du wirklich, dass er das möchte? Xearox hat folgendes geschrieben : | Der code soll folgendes bewirken.
Doppel klick auf einen Artikel, Artikel wird aus liste gelöscht. | :zwinker: |
Er hatte es in dem anderen Topic geschrieben. :nixweiss:
jaenicke hat folgendes geschrieben : |
| Abgesehen davon bezweifle ich, dass bei Multiselect in OnDblClick noch andere markiert bleiben. :gruebel: |
Wenn du statt des letzten Klicks einen Doppelklick machst (mit Strg oder Shift), dann bleibt die Auswahl stehen, ja. ;) (ich gebe zu, habe ich auch erst ausprobieren müssen :oops:)
cu
Narses
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!