![]() |
Ein Eintrag aus einer Listbox entfernen
Hallo
ich wollte einen Eintrag aus einer ListBox entfernen. bekomme aber immer die Fehlermeldung: maximaler Index.....
Delphi-Quellcode:
Wieso klappt der Code nicht.
if ListBox1.Selected[i] = True then
ListBox1.Items.Delete(i); |
AW: Ein Eintrag aus einer Listbox entfernen
Liegt er in einer Schleife und läuft die Schleife vorwärts? Also das sagt mir jetzt so meine Glaskugel. Lass die Schleife mal rückwärts laufen, dann sollte es gehen.
|
AW: Ein Eintrag aus einer Listbox entfernen
Versuch' mal so:
Prüfung auf true ist nicht schön und eventl. den Index überprüfen
Delphi-Quellcode:
Gruß
if I > -1 then
if I < ListBox1.Items.Count then if ListBox1.Selected[I] then ListBox1.Items.Delete(I); Thomas |
AW: Ein Eintrag aus einer Listbox entfernen
Ich habe meinen Delphi Rechner gerade nicht an, aber mal ins Blaue Geräten:
ListBox1.Items[i].Delete; |
AW: Ein Eintrag aus einer Listbox entfernen
ListBox1.DeleteSelected;
|
AW: Ein Eintrag aus einer Listbox entfernen
Zitat:
|
AW: Ein Eintrag aus einer Listbox entfernen
Zeig doch mal etwas mehr Code. So könne wir nur raten, was du da machst.
|
AW: Ein Eintrag aus einer Listbox entfernen
Zitat:
Delphi-Quellcode:
mehr Code habe ich nicht.
procedure TForm12.RbButton4Click(Sender: TObject);
var i: Integer; begin if I > -1 then if I < ListBox1.Items.Count then if ListBox1.Selected[I] then ListBox1.Items.Delete(I); end; |
AW: Ein Eintrag aus einer Listbox entfernen
Zitat:
Kein Wunder:
Delphi-Quellcode:
wird nie initialisiert, kann also jeden beliebigen Wert haben.
I
Welchen Eintrag willst du denn löschen? Zitat:
Sonst passiert genau das, was eben passiert ist: Nichts geht mehr und keiner weiß warum. EDIT: Glaskugel an!
Delphi-Quellcode:
procedure TForm12.RbButton4Click(Sender: TObject);
var i: Integer; begin for i := ListBox1.Items.Count - 1 downto 0 do if ListBox1.Selected[i] then ListBox1.Items.Delete(i); end; |
AW: Ein Eintrag aus einer Listbox entfernen
#5 geht auch für MultiSelected. :?
|
AW: Ein Eintrag aus einer Listbox entfernen
Ja, jetzt klappt es. vielen Dank an euch allen!
|
AW: Ein Eintrag aus einer Listbox entfernen
Wenn du einen bestimmten Item löschen willst, dann
Delphi-Quellcode:
Wenn du einen ausgewählten Item löschen willst
var
i: Integer; begin i := 2; //Beispiel für das dritte Item if I > -1 then if I < ListBox1.Items.Count then ListBox1.Items.Delete(I); end;
Delphi-Quellcode:
Solltest du mit Multiselect mehrere Items löschen willst, denn
if ListBox1.ItemIndex > -1 then
ListBox1.Items.Delete(ListBox1.ItemIndex);
Delphi-Quellcode:
Achte aber dabei IMMER, dass du runterzählst, sonst kommt der maximaler Index Fehler. Grund, wenn der erst und letzte Item gewählt sind und du den ersten Item löscht, ändert sich die Position des letzten Items. Wenn du runterzählst ist es egal.
var
i: Integer; begin for i := ListBox1.Items.Count - 1 downto 0 do if ListBox1.Selected[I] then ListBox1.Items.Delete(I); end; |
AW: Ein Eintrag aus einer Listbox entfernen
Zitat:
|
AW: Ein Eintrag aus einer Listbox entfernen
Zitat:
//edit: Ich möchte dies keinesfalles als schönen Stil propagieren - doch ist es mir wichtig, bei solchen Aussagen wie "mache nie dies oder jenes" wenigstens eine kurze Erläuterung zu liefern. |
AW: Ein Eintrag aus einer Listbox entfernen
Daniel, das Problem sind die Typecasts: Dann ist gibt es neben TRUE und FALSE auch Werte, die zwar wie TRUE aussehen, sich aber merkwürdig verhalten. Das ist aber ein anderes Thema.
|
AW: Ein Eintrag aus einer Listbox entfernen
Ich mache mal ein neues Thema auf. ;-)
//edit: Spannend. Ich sehe gerade, dass sich in Delphi das Verhalten geändert hat. Meine Beispiele von XE2 liefern unter Delphi 2007 andere Ergebnisse. Unter XE2 konnte ich gestern Abend casten wie ich wollte und hatte stets das korrekte Resultat, unter D2007 sieht das schon anders aus. |
AW: Ein Eintrag aus einer Listbox entfernen
Zitat:
Da wäre es ohne IF wesentlich benutzerfreundlicher.
Delphi-Quellcode:
Denn so oder so, es wird nichts gelöscht, obwohl man was löschen will.
var
i: Integer; begin i := 2; //Beispiel für das dritte Item ListBox1.Items.Delete(I); end; Nur daß dabei einfach nichts passiert ... nichtmal eine Fehlermeldung. Besser den Fehler beheben (aufpassen, daß i den korrtekten Wert bekommt), als den Fehler still und heimlich zu verschweigen, wo sich bestenfalls jemand wundert, daß irgendwas fehlt. (falls es überhaupt auffiehl, daß was nicht stimmte). Das ist ja fast so schlimm wie ein
Delphi-Quellcode:
try
// wichtige Daten speichern, welche unbedingt gespeichert den müssen // oder wichtigen Befehl ausführen, welcher unbedingt ausgeführt werden sollte // oder ... except end; // keiner hast was gemerkt |
AW: Ein Eintrag aus einer Listbox entfernen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz