|
바로 답변 드린점 감사드립니다.
제가 똑같은 상황인줄알고 질문 한 것이 다른 상황이군요 ㅠ.ㅠ
제가 잘못 설명한것 같습니다.
메인폼은 실제로는 F_MAIN입니다.. 이것만 auto-create 되고요
F_ITEM는 실제로는 AVailabled 입니다.그러니까 쉽게 말씀드리자면
메인폼에서 F_ITEM폼을 동적으로 생성 시켰고요
생성된 F_ITEM폼에서 다시 S_IDPN폼을 불러 온것입니다.
그래서 실제로 아래처럼 쓰더라도 에러가 나더라구요 ㅠ.ㅠ
다시 답변 부탁드립니다.
조준회 님이 쓰신 글 :
:
: TF_ITEM *subForm = new TF_ITEM(Application); // 이렇게 주면 에러는 없지만
: : subForm->DPNO->Text = SG1->Cells[0][Row]; // 값이메인폼으로
: : delete subForm;
:
:
: 당연히 위와 같이하면.. 메인폼으로 데이터가 가지 않습니다.
: 위 코드는 메인폼과 같은 새로운 폼을 하나 생성시키고..
:
: 새로로 생성된 메인폼에 데이터를 집어 넣는 것입니다.
:
: 님이 원하는 폼이 아닌..새로 생성된 메임폼과 같은 폼 말 입니다.
:
: item.h에 보시면..extern package로 하나 선언된것이 있을겁니다.
: 그 폼이 메인폼의 객체를 전역으로 선언한것입니다.
:
: auto-create되면.. 전역으로 선언된 포인터에 메모리를 할당하게됩니다.
:
: 위 코드만 가지고 생각해보면.. 아마 메인폼의 이름은 F_ITEM이걸로 생각됩니다.
: 그럼 F_ITEM->DPNO->Text = ... 으로 하면 됩니다.
:
:
: 이 문제는 변수의 통용범위 규칙을 생각해보시면..
: 풀수 있는 문제입니다.
:
:
: 수빈 님이 쓰신 글 :
: : 회원 가입도 안돼 있었네요 게시판을 자유롭게 다니다 보니까..
: : 플밍하는데 이곳의 도움을 무척이나 많이 받고 있답니다.. 일단 감사..
: : 제가 알고 싶은 것은...
: : 일단 두개(사실은 여러개)의 폼이 있습니다.(SDI)
: : 프로젝트 옵션 부분에 메인폼은 auto 이면서 나머지 폼들은 AVailabled입니다.
: : 여태까지는 전부 모든폼을 auto시켰거든요 그러니까 많은 리소스(컴터)잡아먹더군요.
: : 그래서 SDI폼이면서 다른폼을 연동 시킬때 동적으로 생성 시켜야 겠다 하고 다시 작업을
: : 하는데..메인폼에서 동적으로 생성시킨 폼은 메인폼에서 준 데이타를 갖을수 있더군요
: : 그런데 새로 생긴 폼에 있는 데이타를 다시 가져 올려고 하니 아무런 값을 갖고 올수 없더군요
: : ㅠ.ㅠ ...
: : 원인을 알고 싶고 해결 하고 싶습니다... 하단 소스도 봐주세요...
: : //--------------------------------------------------------------------------
: : #include "item.h" // 메인폼
: : #include "SDPN.h" // 동적생설될 폼
: :
: : //---------------------------------------------------------------------------
: : #pragma package(smart_init)
: : #pragma resource "*.dfm"
: : TF_ITEM *F_ITEM;
: : //---------------------------------------------------------------------------
: : __fastcall TF_ITEM::TF_ITEM(TComponent* Owner)
: : : TForm(Owner)
: : {
: : }
: : //---------------------------------------------------------------------------
: : void __fastcall TF_ITEM::DPNOKeyDown(TObject *Sender, WORD &Key,
: : TShiftState Shift)
: : {
: :
: : TS_IDPN *subForm = new TS_IDPN(Application); // 게시판 돌아다니면서 찾은부분.
: : subForm->FLAG->Caption = 1;
: : subForm->ShowModal();
: : delete subForm;
: :
: : }
: :
: : //------------------------------------------------------------------------------
: : 윗부분은 동적으로 폼을 생성시키면서 라벨에 캡션을 1로 주는 겂니다.. 그럼 동적으로
: : 생성되는 폼은 정확하게 값을 갖고있죠..
: :
: : 그럼 하단 부분은 새로 생성된 폼입니다.
: :
: : //---------------------------------------------------------------------------
: : #include <vcl.h>
: : #pragma hdrstop
: :
: : #include "SDPN.h" // 자신폼..
: : #include "item.h" // 메인폼
: : //---------------------------------------------------------------------------
: : #pragma package(smart_init)
: : #pragma resource "*.dfm"
: : TS_IDPN *S_IDPN;
: : //---------------------------------------------------------------------------
: : __fastcall TS_IDPN::TS_IDPN(TComponent* Owner)
: : : TForm(Owner)
: : {
: : }
: :
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TS_IDPN::SG1SelectCell(TObject *Sender, int Col,
: : int Row, bool &CanSelect)
: : {
: :
: : if (FLAG->Caption == 1) //조건문 안으로 들어갑니다.
: : {
: : TF_ITEM *subForm = new TF_ITEM(Application); // 이렇게 주면 에러는 없지만
: : subForm->DPNO->Text = SG1->Cells[0][Row]; // 값이메인폼으로
: : delete subForm; // 안가요
: : }
: : }
: : //---------------------------------------------------------------------------
: :
: : 제가 알고 싶은것은 동적 생성된 폼의 데이타를 다시 메인폼으로 가지고 오는 것입니다..
: : 답변 부탁드립니다.
: :
: :
: :
|