Thema: Delphi Name aus Liste löschen

Einzelnen Beitrag anzeigen

der olli

Registriert seit: 18. Mai 2004
14 Beiträge
 
#5

Re: Name aus Liste löschen

  Alt 14. Nov 2005, 20:02
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
  Mit Zitat antworten Zitat