So, hab noch was weiterprogrammiert und bin direkt beim nächsten Fehler angelangt: Wenn ich das erste Element in der Liste löschen will, kommt zwar keine Fehlermeldung, das Element wird aber auch nicht aus der Listbox entfernt. Wenn ich daraufhin das nachfolgende Element löschen will, ist dieses angeblich nicht mehr in der Liste.
Ähnliches, wenn ich ein einziges Element aus der Listbox löschen will, ohne, dass noch andere vorhanden sind. Wenn ich das versuche, kommt ein Fehler und das Programm stürzt ab.
Hier mal mein etwas veränderter Lösch-Algorithmus (der Rest ist gleich geblieben):
Delphi-Quellcode:
procedure TSkispringen.bt_springer_loeschenClick(Sender: TObject);
var lauf : TZeiger;
such : String;
begin
such := InputBox('Eingabe','Name','');
lauf := oben;
WHILE (lauf^.nachher <> nil) AND (such <> lauf^.name) DO
lauf := lauf^.nachher;
IF (lauf^.name = such) AND (lauf^.nachher = nil) AND (lauf^.vorher <> nil) THEN // letztes Element
lauf^.vorher^.nachher := nil
ELSE IF (such = lauf^.name) AND (lauf^.vorher <> nil) AND (lauf^.nachher <> nil) THEN // nicht erstes/letztes Element
begin
lauf^.vorher^.nachher := lauf^.nachher;
lauf^.nachher^.vorher := lauf^.vorher
end
ELSE IF such = oben^.name THEN // erstes Element
oben^.nachher^.vorher := nil
ELSE
begin
ShowMessage('Springer nicht in der Liste!');
exit
end;
ausgabe
end;
P.S.: Ich glaube, ich spreche das oberste Element falsch an, denn wenn ich nur ein einziges Element in der Liste habe und dieses löschen will, bricht das Programm ab und markiert die Zeile
oben^.nachher^.vorher := nil
!
P.S.: Das TZeiger kam tatsächlich vom Lehrer