Q&A

  • [질문]동적으로 생성한 폼의 컨트롤을 사용하는데 문제가 있습니다.
아래와 같이 변수 선언이 되어있고,
var
  f_main: Tf_main;
  cls: TClass;
  Frm: TForm;


implementation

uses ........

{$R *.dfm}

이런 형태로 함수 선언이 되어 있습니다.
procedure Tf_main.OpenMenu(Sender:TObject);
begin
  cls:=GetClass('Tf_test');
  Application.CreateForm(TComponentClass(cls),Frm);
  Frm.ShowModal;
  Frm.Free;
end;

함수를 콜하면 폼 생성은 잘 됩니다.
그런데 폼에서 다른 폼을 생성하고,
그폼에서 f_test 라는 폼을 참조하면 실행이 에러가 발생합니다.

위의 소스에서 Frm 대신에 f_test를 직접넣으면 잘 됩니다.
두가지가 어떤 차이가 있는건가요?

고수님들 도움 바랍니다.
2  COMMENTS
  • Profile
    이정욱 2010.08.06 22:44
    f_test 와 frm 은 엄연히 다른 변수 입니다..

    frm은 나중에 Tf_test 의 클래스로 생성이 되는것뿐이지 그것이 f_test 변수가 되는것은 아닙니다.

    예를들면 frm, f_test : integer; 라고 선언했다고 해보면, frm := 9; 이렇게 해놓고 f_test 값을 사용하려고 하는것과 같은 이치 입니다.

    그래서 f_test로 생성하면 잘되고 아니면 안된다고 생각하시는 것입니다. ^^
  • Profile
    이정욱 2010.08.06 23:36
    즉... Tf_test(frm).GetFocus <--- 이런식으로 사용하시면 될것입니다.