oh Mann .. du kostest mich Nerven
slLines ist eine lokale Variable und wird
nur im If-Zweig erstellt. Daher kannst du
nur im IF-Zweig unbeschadtet auf dieses Objekt zugreifen. Wenn du es im Else-Teil tust, kommt eine
AV.
Und meine angedeutete Warnung ist eine, die vom Compiler kommt. Nicht vom
Exception-Handling.
Die einfachste und sicherste Lösung ist folgende:
Delphi-Quellcode:
procedure THaupt.KidsClick(Sender: TObject);
var
z, i : Integer;
slLines, slFields, FieldList : TStringList;
begin
try
slLines := TStringList.Create; //<--- Vor dem If erzeugen
if Kids.Checked = false then
begin
slFields := TStringList.Create;
for z := ListView.Items.Count-1 downto 0 do
if ListView.Items[z].SubItems[1] = 'TV - Kids' then
begin
slFields.Assign(Listview.Items[z].SubItems);
slFields.Insert(0, Listview.Items[z].Caption);
slLines.Add(slFields.CommaText);
ListView.Items[z].Delete;
end;
Listview.Invalidate;
showmessage(slLines.CommaText);
end
else
begin
FieldList := TStringList.Create;
for i := 0 to Pred(slLines.Count) do //<--- Und hier unbeschadet verwenden
begin
FieldList.CommaText := slLines[i];
with ListView.Items.Add do
begin
Caption := FieldList[0];
FieldList.Delete(0);
SubItems.Assign(FieldList);
end;
end;
slFields.Free;
FieldList.Free;
end;
end;
finally
slLines.Free; //<--- und in jedem Falle freigeben
end;
end;