Q&A

  • 버튼 클릭시 자신을 삭제하기
버튼을 동적생성하여 TObjectList 에 추가했습니다.
그런데 폼디자인시에 만들어졌던 버튼을 클릭하여 동적생성된 Object를 삭제하면, 에러가 없는데
동적생성한 버튼을 클릭하여 삭제하면 에러가 발생합니다.
생성하는 것에는 아무런 문제가 없는데 말입니다.

좀 봐주시겠어요?

아래는 소스를 간추려본것입니다.

private
    ItemList: TObjectList;
    NewBtn: TButton;

// 새로운 버튼을 생성하는 프로시져
procedure BtnCreate;
begin
  NewBtn := TButton.Create(self);
  ItemList.Add(NewBtn);

  with NewBtn do begin
    Parent := MainForm;
    Name := 'Btn1';
    Left := Mouse.CursorPos.X;
    Top := Mouse.CursorPos.Y;
    Visible := True;

    OnClick := NewBtnClick;
  end;
end;

// 동적 생성된 버튼의 클릭이벤트
procedure TForm1.NewBtnClick(Sender: TObject);
begin
  ItemList.Free;   <== 이곳에서 에러가 발생합니다.
end;

// 버튼을 생성한다(동적생성된 버튼이 아님)
procedure TForm1.Button1Click(Sender: TObject);
begin
  BtnCreate;
end;

// TObjectList 를 삭제한다.(동적생성된 버튼이 아님)
procedure TForm1.Button2Click(Sender: TObject);
begin
  ItemList.Free; <== 이곳에선 에러가 발생하질 않습니다.
end;
3  COMMENTS
  • Profile
    꿈의대화 2004.01.14 17:38
    .
  • Profile
    Doli 2004.01.14 21:04
    ItemList를 삭제하지 않고 이런식으로 코딩을 해도 마찬가지 에러가 발생합니다.

    에러가 발생하는 곳에 ItemList.Free; 대신

    TButton(Sender).Free;

    마찬가지 에러인데요.
    정녕 자기 자신을 Free 시키는 방법은 없는것입니까? ㅡㅜ

  • Profile
    이은주 2009.11.13 07:54
    지금쯤은 아셨겠지만...
    자기를 생성한 부모를 자식이 직접 제가하는 어떠한 방식도 안되는 것으로 알고 있습니다.
    자신이 담겨 있는 객체 자체를 자식이 직접 제거를 하려고 하는데서 생기는 오류인 것 같습니다.