Einzelnen Beitrag anzeigen

Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#6

Re: AccessViolation mit Checkbox aber warum?

  Alt 9. Dez 2005, 11:34
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 - Kidsthen
              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;
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat