Thema: Delphi Zugriffsverletzung

Einzelnen Beitrag anzeigen

Koller

Registriert seit: 22. Mär 2005
59 Beiträge
 
#11

Re: Zugriffsverletzung

  Alt 12. Jun 2006, 11:13
Das komische ist ja, dass die alte Version funktioniert:
Delphi-Quellcode:
procedure TForm1.DeleteSubject(Sender : TObject);
var row,i,i2:integer;
begin
  row:=(Sender as TButton).Tag;
  if row=High(EditsArray) then
  begin
    for i2 := 1 to 6 do
    begin
      EditsArray[row][i2].Free;
    end;
    BtnLoeschenArray[row].Free;
  end else
  begin
    for i := row to High(EditsArray)-1 do
    begin
      for i2 := 1 to 6 do
      begin
        EditsArray[i][i2].text:=EditsArray[i+1][i2].text;
      end;
      BtnLoeschenArray[i].Tag:=BtnLoeschenArray[i+1].Tag;
    end;
      for i2 := 1 to 6 do
      begin
        EditsArray[High(EditsArray)][i2].Free;
      end;
      BtnLoeschenArray[High(EditsArray)].Free;
  end;
  SetLength(EditsArray,Length(EditsArray)-1);
  SetLength(BtnLoeschenArray,Length(BtnLoeschenArray)-1);
  UpdateSubjects;
end;
Und die neue:
Delphi-Quellcode:
 
procedure TMarkFile.DeleteSubject(Sender : TObject);
var row,i,i2:integer;
begin
  row:=(Sender as TButton).Tag;
  if row=High(FEingabeArray) then
  begin
    for i2 := 1 to 5 do
    begin
      FreeAndNil(FEingabeArray[row].array_edit[i2]);
    end;
    FreeAndNil(FEingabeArray[row].button_loeschen);
    FreeAndNil(FEingabeArray[row].Combobox_fach);
  end else
  begin
    for i := row to High(FEingabeArray)-1 do
    begin
      for i2 := 1 to 5 do
      begin
        FEingabeArray[i].array_edit[i2].text:=FEingabeArray[i+1].array_edit[i2].Text;
      end;
      FEingabeArray[i].button_loeschen.Tag:=FEingabeArray[i+1].button_loeschen.Tag;
      FEingabeArray[i].Combobox_fach.Text:=FEingabeArray[i+1].Combobox_fach.Text;
    end;
      FreeAndNil(FEingabeArray[High(FEingabeArray)].Combobox_fach);
      FreeAndNil(FEingabeArray[High(FEingabeArray)].button_loeschen);
      for i2 := 1 to 5 do
      begin
        FreeAndNil(FEingabeArray[High(FEingabeArray)].array_edit[i2]);
      end;
  end;
  SetLength(FEingabeArray,Length(FEingabeArray)-1);
  UpdateSubjects;
end;
funktioniert nicht, obwohl ich vom Prinzip her nichts geändert habe. Ich habe nur die verschiedenen Komponenten in ein array of record gepackt.
  Mit Zitat antworten Zitat