Einzelnen Beitrag anzeigen

Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Löschen einzelner Items einer ListBox

  Alt 22. Okt 2019, 09:23
Eine Möglichkeit wäre ein Array zu verwenden (geht nur, wenn die Listbox sich nicht sortiert, ansonsten muss das Array auch mit sortiert werden!).
Code:
var
  aArray: array of bool; //Bool ist nur eine Empfehlung
Das Array müsste (idealerweise) immer die Größe haben, wieviele Items es in der Listbox gibt.
Code:
setlength(aArray, Listbox.items.count);
So das Listboxitem 0 = aArray[0] wäre.

Beim löschen/schreiben musst du dann das Array natürlich jedesmal mit anpassen.
Hinzufügen
1. Den Eintrag in die Listbox hinzufügen
2. die Länge des Array neu definieren
3. Den entsprechenden Eintrag im Array anpassen. z.B. (ungetestet):
Code:
Listbox.items.add('ITEMTEXT');
setlength(aArray, Listbox.items.count);
iItem := Listbox.IndexOf('Eintrag');
aArray[iItem] := True; //(True = darf gelöscht werden, False = darf nicht gelöscht werden)
//optional, wenn du das "X" (leider nur als Haken möglich) haben willst:
//CheckListbox.items[iItem].checked := aArray[iItem];
Löschen
Code:
iItem := ListBox.ItemIndex; //Position zwischenspeichern
if aArray[iItem] then //Prüfung
begin
  //darf gelöscht werden
  ListBox.Items.Delete(iItem);
  //Achtung das Array muss auch angepasst werden!
  for i := iItem + 1 to length(aArray) do //Array durchlaufen und aufrücken
  begin
    aArray[i - 1] := aArray[i];
  end;
  aArray := length(aArray) - 1;
end else
begin
  //darf nicht gelöscht werden -> Fehlermeldung?
end;
Alles nur aus dem Gedächtnis und kann Fehler enthalten
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (22. Okt 2019 um 10:03 Uhr)
  Mit Zitat antworten Zitat