project - option 에서 auto create form1 만 생성이 되게 하고
form1에 있는 버튼을 누르면 form2가 보여지게 했습니다.
그런데 show 랑 create 의 차이점이 뭐죠?
show 하면 되는데 create 하면 에러가 납니다.
에러 내용은 그 흔한..violation ...그 에러구요,,
물론 auto create form에서는 처음에 보여질 폼과 생성될 폼만 넣는거 맞죠?
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Create(Application);
//form2.Show;
end;
답변좀 부탁 드립니다.
제가 생각해도 참 기본 적인것 같은데...
항상 행복하세요
> project - option 에서 auto create form1 만 생성이 되게 하고
> form1에 있는 버튼을 누르면 form2가 보여지게 했습니다.
> 그런데 show 랑 create 의 차이점이 뭐죠?
> show 하면 되는데 create 하면 에러가 납니다.
> 에러 내용은 그 흔한..violation ...그 에러구요,,
> 물론 auto create form에서는 처음에 보여질 폼과 생성될 폼만 넣는거 맞죠?
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> Form2.Create(Application);
> //form2.Show;
> end;
> 답변좀 부탁 드립니다.
> 제가 생각해도 참 기본 적인것 같은데...
> 항상 행복하세요
물론 auto create에는 처음부터 필요한 폼들만 잇으면됩니다.
처음 프로그램이 시작될때 메모리를 적게 사용해 로딩하므로 처음시작은 빠르지요.
Form.Create시 폼을 메모리상에 생성하는것이므로 재생성시 폼핸들 충돌 에러가 발생할거고요, 또 이미 생성된 것을 피했더라도 제대로 제거하지 않으면 폼의 Create이벤트 내용이 실행되지 않을것입니다.
따라서 호출용에서는 그폼이 생성되있는지 확인해야합니다
if not(assigned(Form2)) then
Form2 := TForm2.Create(nil);
Form2.SHow;
그리고 호출 당하는 폼이나 깨끗이 제거해야하는 폼의 Cloae와 Destroy에는 아래처럼사용하여도되고 다른방법도 있습니다.
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action :=caFree;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
Form2 := nil;
end;