Project 구성요소 : tform1, tform2, tform3
Project auto create form : tform1
1.form1의 버턴 클릭이벤트에서 form2를 application.createform이나
form2 = tform2.create(application)으로 생성후 showmodal
2.form2의 버턴 클릭이벤트에서 form3를 application.createform이나
form3 = tform3.create(application)으로 생성후 showmodal
3.form3의 버턴 클릭이벤트에 아래와 같이 코딩하여 form2에 있는 구성요소를
참조할려고 하면 access violation error가 발생
procedure TForm3.Button1Click(Sender: TObject);
begin
edit1.text := form2.Edit1.text;
{ 위의 라인을 디버깅 해보면 form2에 nil이 할당되어 있습니다...
업무의 특성상 윈도우를 동적으로 생성하고 동적으로 생성된 폼들간에
published 영역에 선언된 공용 변수값이나 기타 컨트롤을 참조를 해야 하는데
위와 같이 코딩을 해도 form2를 제대로 참조할 수 가 없습니다..}
end;
혹시 Uses문에 어떻게 하셨는지 모르겠네요..
Form2에서는 맨위의 USes문에 Form3의 유닛을 참조하라고 하고,
Form3에서는 Implemetation 밑의 Uses문에 Form2의 유닛을 참조하라고 해야합니다.
또하나의 방법은 Form2에서 Form3.ShowModal을 한 후 ModalResult가 나오면 그냥 Form2의 유닛안에서 Form3안의 객체를 참조해도 괜찮습니다.
예를들면 ..
Form3 := TForm3.Create(Self);
Edit1.Text := Form3.Edit1.Text; //여기서는 Form2의 Edit1의 값을 Form3에 넣어준다.
If Form3.ShowModal = mrOK then Form3.Edit1.Text := Edit1.Text;
Form3.Free;
예를들어 위처럼 해주셔도 잘 됩니다.
왕초보 wrote:
> Project 구성요소 : tform1, tform2, tform3
> Project auto create form : tform1
>
> 1.form1의 버턴 클릭이벤트에서 form2를 application.createform이나
> form2 = tform2.create(application)으로 생성후 showmodal
> 2.form2의 버턴 클릭이벤트에서 form3를 application.createform이나
> form3 = tform3.create(application)으로 생성후 showmodal
> 3.form3의 버턴 클릭이벤트에 아래와 같이 코딩하여 form2에 있는 구성요소를
> 참조할려고 하면 access violation error가 발생
>
> procedure TForm3.Button1Click(Sender: TObject);
> begin
> edit1.text := form2.Edit1.text;
> { 위의 라인을 디버깅 해보면 form2에 nil이 할당되어 있습니다...
> 업무의 특성상 윈도우를 동적으로 생성하고 동적으로 생성된 폼들간에
> published 영역에 선언된 공용 변수값이나 기타 컨트롤을 참조를 해야 하는데
> 위와 같이 코딩을 해도 form2를 제대로 참조할 수 가 없습니다..}
>
> end;