Q&A

  • create명령어로 만든 폼에 대해서..
create로 명령어로 폼(formname : maip) 을 만들었습니다.

edit에 값을 넣을때 edit1.text := 'test' 하면 에러가 나타나지 않는데

maip.edit1.text := 'test'하면 에러가 납니다.



제가 왜 이런 질문을 하냐면 create명령어로 만든폼에서 하위폼을 show하게 됩니다.

그 하위폼에서 검색한 자료를 maip폼에 있는 컴포넌트에 값을 넣고 싶습니다.

그래서 mip.edit1.tex := fieldbyname('m_no').asstring;

이렇게 했는데 에러가 나더군요 어떻게 해야 하는지요...

3  COMMENTS
  • Profile
    김일영 2000.05.04 04:24
    상황을 제대로 짐작한 것인지 모르겠지만, 아마도 문제된 코드가

    show되었다는 그 하위폼에 있는 것 같은데요.

    그렇다면 하위폼이 선언된 그 유닛에서, maip폼을 선언한 유닛을

    uses 해야 합니다. 두 유닛이 서로 uses할 때는 한 쪽은 interface에서,

    다른 쪽은 implementation에서 uses하라고 하는군요.

    간단한 내용이긴 합니다만... 때로는 저도 깜빡 잊어버리곤 합니다.

    이 내용이 아니라면... 좀 더 자세한 코드와 함께 올려주시면 더 생각해보겠습니다.

    ==================================================================

    blueofsky wrote:

    > create로 명령어로 폼(formname : maip) 을 만들었습니다.

    > edit에 값을 넣을때 edit1.text := 'test' 하면 에러가 나타나지 않는데

    > maip.edit1.text := 'test'하면 에러가 납니다.

    >

    > 제가 왜 이런 질문을 하냐면 create명령어로 만든폼에서 하위폼을 show하게 됩니다.

    > 그 하위폼에서 검색한 자료를 maip폼에 있는 컴포넌트에 값을 넣고 싶습니다.

    > 그래서 mip.edit1.tex := fieldbyname('m_no').asstring;

    > 이렇게 했는데 에러가 나더군요 어떻게 해야 하는지요...

  • Profile
    blueofsky 2000.05.04 18:39
    제가 말씀드릴려고 하는것은...

    MDI폼으로 만들었습니다. 그리고 폼을 생성시킬때는 Create문을 사용해서 만들었습니다.

    예>

    var

    form2 : form2;

    begin

    form2 := form2.create(self);

    form2.show;

    end;



    form2폼에서

    form2.edit1.text := 'test';

    이렇게 코딩을 했습니다. 하지만 access violation이라는 에러가 납니다..





    제가 왜 이런 질문을 하는 이유는

    form2에서 하위폼인 form3을 show하고 form3에서 검색된 자료값을 form2의 컴포넌트에 값을 넘겨주고 싶어서 그렇습니다.

  • Profile
    김일영 2000.05.04 22:01
    form2.edit1.text := 'test';라는 코딩을 하는 것과,

    form2에서 하위폼인 form3을 show하고 form3에서 검색된 자료값을 form2의 컴포넌트에 값을 넘겨주고자 하시는 것 사이에 어떤 관계가 있는지 짐작할 수 없습니다만,

    제가 테스트 해보니 form2.edit2.text := 'test';라는 코딩을 해도

    아무런 상관이 없더군요.



    테스트한 소스 일체를 올려드립니다. 참고하세요.



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, Menus;



    type

    TForm1 = class(TForm)

    MainMenu1: TMainMenu;

    New1: TMenuItem;

    procedure New1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    uses

    Unit2;



    procedure TForm1.New1Click(Sender: TObject);

    begin

    Form2 := TForm2.Create(Self);

    Form2.Show;

    end;



    end.







    unit Unit2;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;



    type

    TForm2 = class(TForm)

    Edit1: TEdit;

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form2: TForm2;



    implementation



    {$R *.DFM}



    procedure TForm2.Button1Click(Sender: TObject);

    begin

    form2.edit1.text := 'test';

    end;



    end.



    =======================================================================

    blueofsky wrote:

    > 제가 말씀드릴려고 하는것은...

    > MDI폼으로 만들었습니다. 그리고 폼을 생성시킬때는 Create문을 사용해서 만들었습니다.

    > 예>

    > var

    > form2 : form2;

    > begin

    > form2 := form2.create(self);

    > form2.show;

    > end;

    >

    > form2폼에서

    > form2.edit1.text := 'test';

    > 이렇게 코딩을 했습니다. 하지만 access violation이라는 에러가 납니다..

    >

    >

    > 제가 왜 이런 질문을 하는 이유는

    > form2에서 하위폼인 form3을 show하고 form3에서 검색된 자료값을 form2의 컴포넌트에 값을 넘겨주고 싶어서 그렇습니다.