Q&A

  • 버튼 클릭시 자신 Free 시키기 - 이런 이유가?
전에 올렸던 질문 내용 입니다.
아래에 에러가 발생하는 경우를 적어보았습니다.
------------------------------------------------------
디자인시 판넬위에 버튼 컴포넌트를 두고 자신을 클릭했을 경우

procedure TMainForm.Button1Click(Sender: TObject);
begin
  Button1.Free; <-- 에러가 발생하지 않습니다.
end;

그런데 동적생성을 하고

  NewBtn := TButton.Create(Self);
  with NewBtn do begin
    Parent := Panel1;
    Name := 'Btn1';
    Top := 100;
    Left := 100;
    Visible := True;
    OnClick := NewBtnClick;
  end;

procedure TMainForm.NewBtnClick(Sender: TObject);
begin
  TButton(Sender).Free; <- Access Violation 에러 발생
end;

이유가 무엇일까요?
디자인시에 생성했던 버튼은 자신을 클릭시 Free가 가능하고
프로그램 실행시 동적생성했던 버튼은 자신을 클릭했을 때 Violation 에러가 발생하는데,
어떤 해결 방법이 없을까요?
한번 봐주세요.. ^^;;;

------------------------------------------------------------
에러 발생 이유
------------------------------------------------------------
위의 내용이 전에 질문드렸던 내용인데..
다른 님들은 실행하면 에러가 없었다고 하더라구요.. 이상해서 저두 깨끗한 폼에 똑같은 코딩으로 해보았더니 에러가 발생하지 않더군요.

이것저것 테스트를 하다보니 제가 만지던 폼에는 TSpeedButton 이 있었습니다.
그 스피드버튼의 Glyph 속성에 이미지를 넣었었는데 그것 때문에 에러가 발생하네요.
Glyph 속성의 이미지를 클리어 시키고 하면 에러가 발생하지 않습니다.

이미지를 불러올 수 있는 컴포넌트들(TImage,TSpeedButton,TBitBtn등)을 이미지 불러오지 않고 사용하면 에러가 발생하지 않습니다만,
이미지를 Glyph이나 Picture 속성에 불러오면 에러가 발생하네요.

물론 생성하는 버튼은 그냥 TButton이구요, 한폼에 위의 컴포넌트들에 이미지가 불려져 있으면 에러가 발생한다는겁니다.

무슨 이유인지 좀 부탁드립니다. 왜 그럴까요?
무척 궁금하네요....
0  COMMENTS