Q&A

  • 폼간의 데이타 전달...고수님들..
어떤 폼에서 새로운 폼을 showmodal로 띄었는데..새로뜬 폼에서 어떠한

값을 결정하고 새로 뜬 폼이 close 되면서 원래의 폼의 에디트 콘트롤에

그 값을 적용하려고 하니 access violation 에러가 계속 나네요..

고수 님들 부탁합니다.

4  COMMENTS
  • Profile
    도움받은이 2000.02.08 07:37


    form1에서



    form2.showmodal;

    if form2.modalresult = mrOk then

    begin

    form1.text := form2.edit1.text;

    ....이렇게 작업을

    end else

    begin

    .... 작업

    end;

    form2.free; //이렇게 작업을 한 후에 폼을 메모리에서

    //해제 해 주어야만 메모리 에러가 나지 않습니다.

    //참 폼2 에서는 폼을 닫기 위한 다른 작업은 안해 주셔도 됩니다.

    close라든가 하는것들...modalresult := mrOk, mrCancel로 충분함....

    그리고 나중에 작업후 free를....





    form2에서



    어떤작업을하고...



    확인버튼에서

    modalresult := mrOk; //이렇게 하면 폼이 닫힙니다.



    취소버튼에서

    modalresult := mrCancel; //마찬가지로 폼이 닫힙니다.











    초짜 wrote:

    > 어떤 폼에서 새로운 폼을 showmodal로 띄었는데..새로뜬 폼에서 어떠한

    > 값을 결정하고 새로 뜬 폼이 close 되면서 원래의 폼의 에디트 콘트롤에

    > 그 값을 적용하려고 하니 access violation 에러가 계속 나네요..

    > 고수 님들 부탁합니다.

  • Profile
    강인규 2000.02.07 23:46
    혹시 uses절을 선언 안한것이 아닌지...

    그리구 modal이 종료될때 (close Event가 되겠지요?)선언된 내용을 적용시켜야 합니다.

    버튼 클릭이벤트에 하심 안되지요.

    뭐 소스도 필요없겠죠?

    close Event에

    form1.edit1.text := edit1.Text;

    뭐 이렇게 하심 됩니다.





    초짜 wrote:

    > 어떤 폼에서 새로운 폼을 showmodal로 띄었는데..새로뜬 폼에서 어떠한

    > 값을 결정하고 새로 뜬 폼이 close 되면서 원래의 폼의 에디트 콘트롤에

    > 그 값을 적용하려고 하니 access violation 에러가 계속 나네요..

    > 고수 님들 부탁합니다.

  • Profile
    최원실 2000.02.07 23:20
    초짜 wrote:

    > 어떤 폼에서 새로운 폼을 showmodal로 띄었는데..새로뜬 폼에서 어떠한

    > 값을 결정하고 새로 뜬 폼이 close 되면서 원래의 폼의 에디트 콘트롤에

    > 그 값을 적용하려고 하니 access violation 에러가 계속 나네요..

    > 고수 님들 부탁합니다.



    안녕하세요.. 자나가다가 들렸습니다.



    1. 호출하는 Form1에서 호출되어지는 Form2를 uses에 선언

    2. Form1에서 호출하는 부분에서 호출

    예) if Form2 = nil then

    Form2 := TForm2.Create(Application);

    Form2.ShowModal; // Form2를 불러오기

    Edit1.Text := Form2.sValue; // From2에서 가져온 값...

    3. Form2에서 받을값을 public 변수를 주어 선언한다.

    예) public 절

    sValue : String; // 사용자가 입력한 값을 받을 스트링 값을 선언...

    4. Form2가 Close될때 값을 Form1에 값을 넘겨줄때 OnClose Event를 이용한다.

    예) sValue := edit1.Text; // edit1--사용자가 입력하는 부분

    // 사용자가 입력한 값을 sValue에 넣어줌.

    // sValue는 public변수 이므로 다른 Form에서

    이용 할수 있다. (즉, sValue를 Form1에서 사용..)



    간단하게 몇글자 적어봅니다...도움이 됐는지요....

    그럼이만 좋은 하루 되세요...







  • Profile
    kingdol 2000.02.07 23:11
    초짜 wrote:

    > 어떤 폼에서 새로운 폼을 showmodal로 띄었는데..새로뜬 폼에서 어떠한

    > 값을 결정하고 새로 뜬 폼이 close 되면서 원래의 폼의 에디트 콘트롤에

    > 그 값을 적용하려고 하니 access violation 에러가 계속 나네요..

    > 고수 님들 부탁합니다.





    제가 쓰는 방법인데 도움이 될지 모르겠네요

    다른방법도 있겠지만 제가쓰는 방법은 해당폼에 프로퍼티를 선언해놓고

    그것을 이용하여 값을 전달하는 방법입니다.



    우선 호출하는폼 : form1

    호출받는폼 : form2 라 하고요..



    form1에서 form2를 호출하는 부분은 다음과 같습니다..



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    With TForm2.Create(Application) do

    begin

    ShowModal;

    Edit1.Text := Return_value; // 이것에 주목하세요...

    Free;

    end;

    end;



    여기에서 Return_value 는 form2에서 선언된 프로퍼티이구여..

    Edit1은 from1에 위치한 에디트박스이죠...





    이것으로 호출하는 폼에서의 코딩은 끝난거구여..

    이제 호출받는쪽의 소스를 살펴볼까요..





    unit Unit2;



    interface



    uses

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

    ComObj, Grids, StdCtrls, AxCtrls, OleCtrls, vcf1;



    type

    TForm2 = class(TForm)

    Button4: TButton;

    procedure Button4Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    Return_value : String; // 이곳에 원하는 타입으로 프로퍼티를 선언합니다...

    end;

    .

    .

    .

    .

    .

    폼의 정의부분에 원하는 타입으로 변수(프로퍼티)를 정의한다음..

    해당폼의 Close Event에서 다음과 같이 코딩하시면 됩니다...



    procedure TForm2.Button2Click(Sender: TObject);

    begin

    Return_value := Edit2.Text; // 여기에서 Edit2는 Form2에서 입력한 값이 되겠죠..

    Close;

    end;