|
무슨 내용인지 질문내용을 이해하기가 힘들군요..
그러나 답은 변수통용범위에 대한 내용인걸로 보입니다.
순수하게 아래 코드만 보더라도..
TF_ITEM *subForm = new TF_ITEM(Application); // 이렇게 주면 에러는 없지만
subForm->DPNO->Text = SG1->Cells[0][Row]; // 값이메인폼으로
delete subForm;
1라인에서. 객체를 생성시켰고.
2라인에서 데이터를 적용시켰고..
3라인에서 객체를 해제했습니다.
객체가 자체가 해제되었는데..
객체내의 변경된 데이터가 남아 있겠습니까?.
위 내용만 가지고는 어떤 의도로 저런 코드를 사용했는지 이해가 되지 않아서 ..
더이상의 답변은 힘들지만..
변수의 통용범위에 대한 이해를 하시면.. 풀수 있을겁니다.
수빈 님이 쓰신 글 :
: 바로 답변 드린점 감사드립니다.
: 제가 똑같은 상황인줄알고 질문 한 것이 다른 상황이군요 ㅠ.ㅠ
: 제가 잘못 설명한것 같습니다.
: 메인폼은 실제로는 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; // 안가요
: : : }
: : : }
: : : //---------------------------------------------------------------------------
: : :
: : : 제가 알고 싶은것은 동적 생성된 폼의 데이타를 다시 메인폼으로 가지고 오는 것입니다..
: : : 답변 부탁드립니다.
: : :
: : :
: : :
|