joar
* "geloescht" wird niemals verwendet
* "weiter" wird oft garnicht gesetzt/zugewiesen (warum liest niemand das, was der Compiler sagt?)
* * siehe Objekte.Count=0 oder nicht mbYes
* Clear ist etwas nutzlos, weil dort die Liste immer schon leer ist (bei Dem wie du es da oben machst)
* das letzte ShowMessage: Result sind weiter sind immer gleich ... wozu dann Beides anzeigen?
* ...
Delphi-Quellcode:
begin
if ohneWarnmeldung then begin
Result := True;
end else begin
Result := (Objekte.Count=0) or (MessageDlg('Wollen Sie die vorhandenen '+Objekte.Count.ToString+' Objekte überschreiben',mtConfirmation,[mbYes,mbNo],0)=mrYes);
end;
{
Result := ohneWarnmeldung or (Objekte.Count=0) or (MessageDlg('Wollen Sie die vorhandenen '+Objekte.Count.ToString+' Objekte überschreiben',mtConfirmation,[mbYes,mbNo],0)=mrYes);
}
if Result then begin
while Objekte.Count>0 do begin
OB := Objekte[0];
OB.loeschen;
Objekte.Delete(0);
end;
{
while Objekte.Count>0 do begin
//OB := Objekte.Extract(0); // Extract = Auslesen+Delete
//OB.loeschen;
Objekte.Extract(0).loeschen;
end;
}
{
for var i := Objekte.Count-1 downto 0 do
Objekte[i].loeschen;
Objekte.Clear;
}
{
// Warum "loeschen" und nicht Free/Destroy?
// Warum keine ObjectList mit Owns=True?
// Und schon reicht ein einziger Befehl.
Objekte.Clear;
}
end;
end;
Genau das, was dein Code von da oben macht, nur ohne die "nichtinitialisierten Variablen" (
vor dem zwei IF noch ein weiter:=True; eingefügt) und die IFs auch direkt zusammengefasst.
Delphi-Quellcode:
begin
if not ohneWarnmeldung and (Objekte.Count>0) and (MessageDlg('Wollen Sie die vorhandenen '+Objekte.Count.ToString+' Objekte überschreiben?',mtConfirmation,[mbYes,mbNo],0)=mrYes) then
Exit(False);
while Objekte.Count> do
Objekte.Extract(0).loeschen;
Result := True;
end;
oder
Delphi-Quellcode:
begin
if not ohneWarnmeldung and (Objekte.Count>0) and (MessageDlg('Wollen Sie die vorhandenen '+Objekte.Count.ToString+' Objekte überschreiben?',mtConfirmation,[mbYes,mbNo],0)=mrYes) then
Exit(False);
for var i := 0 to Objekte.Count-1 do
Objekte[i].loeschen;
Objekte.Clear; // ob noch ein Try-Finally oder die Variante mit Extract ... kommt drauf an, wie man die Fehlerbehandlung braucht, falls es im "loeschen" knallt
Result := True;
end;