C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[22895] Re:감사합니다... 제가 찾는 답이었습니다... 꾸벅 (내용무)^.^
수빈 [] 875 읽음    2002-11-28 09:53


Julien 님이 쓰신 글 :
: TF_ITEM이 메인폼의 클래스인가 보군요.
: 메인폼이든 아니든 TF_ITEM에서 TS_IDPN을 생성하게 되므로 TF_ITEM이 TS_IDPN의 Owner로 두도록 하면 됩니다.
:
: 먼저 서브폼을 생성할 때 인자로 Application인 아닌 메인폼의 포인터를 넘겨줍니다.
: void __fastcall TF_ITEM::DPNOKeyDown(TObject *Sender, WORD &Key,
:       TShiftState Shift)
: {
:         //this가 메인폼을 가리키는 포인터인 건 아시죠?
:         TS_IDPN *subForm = new TS_IDPN(this);
:         subForm->FLAG->Caption = 1;
:         subForm->ShowModal();
:         delete subForm;
: }
:
: 서브폼에서 TF_ITEM이라는 타입의 클래스를 인식할 수 있도록 메인폼의 헤더파일을 인클루드해야합니다.
: 그러고 다음처럼 코딩하시면 됩니다.
: void __fastcall TS_IDPN::SG1SelectCell(TObject *Sender, int Col,
:       int Row, bool &CanSelect)
: {
:
:         if (FLAG->Caption == 1)   //조건문 안으로 들어갑니다.
:         {
:               //Owner는 생성자에서 인자로 받아오는 변수입니다.
:               //이것이 메인폼에 대한 포인터이므로 타입캐스팅을 하면
:               //메인폼의 child에 접근할 수 있습니다.
:               TF_ITEM* parent = dynamic_cast<TF_ITEM*>(Owner);
:               parent->DPNO->Text = SG1->Cells[0][Row];
:         }
: }
:
: 여기서
: TF_ITEM *subForm = new TF_ITEM(Application);     // 이렇게 주면 에러는 없지만
: subForm->DPNO->Text      = SG1->Cells[0][Row];   // 값이메인폼으로
: delete subForm;                                  // 안가요
: 이렇게 하셨는데.. TF_ITEM이라는 클래스에 대한 폼은 현재 생성되어서 창이 떠 있는 상태이고
: 그 상태에서 서브폼인 TS_IDPN을 호출하였습니다.
: 그런데 다시 new를 이용하여 TF_ITEM에 대한 인스턴스를 생성하게 되면 새로 하나를 더 생성하게 됩니다. 즉 이미 메모리에 있는 것과는 별개의 새로운 인스턴스가 만들어진다는 거죠.
: 그러므로 코드는 제대로 작동하더라도 화면에 보이지 않는(Show하지 않았으므로) 다른 폼에 그 내용이 전달되는 것입니다. 그러고 나서 또 delete를 하였으니 그 마저도 사라져 버리는 거죠.
: 그러나 원하는 건 기존의 인스턴스에 그 결과가 반영되도록 하는 것이므로 기존의 폼에 대한 포인터를 이용하여 작업을 해야 하는 것입니다.
:
: 다음의 경우에서
:
: main()
: {
:   int a = 1;
: }
:
: void func(int b)
: {
:   int a = 2;
: }
:
: 이렇게 하였을 때 main의 a와 func의 a가 동일한 a가 아닌 것과 같은 이유입니다.
:

+ -

관련 글 리스트
22879 /* 질문 */ 두개의 폼간의 데이타 연동 ...검색을 다 찾아 보았는데모르겠어요! 수빈 855 2002/11/27
22892     부모폼의 포인터만 알면 쉽게 부모폼의 컨트롤에 접근할 수 있죠. Julien 1077 2002/11/27
22895         Re:감사합니다... 제가 찾는 답이었습니다... 꾸벅 (내용무)^.^ 수빈 875 2002/11/28
22882     Re:/* 질문 */ 두개의 폼간의 데이타 연동 ...검색을 다 찾아 보았는데모르겠어요! 조준회 1179 2002/11/27
22883         Re:Re:일단 감사드립니다.. 추가 질문 입니다. 수빈 650 2002/11/27
22884             Re:Re:Re:일단 감사드립니다.. 추가 질문 입니다. 조준회 657 2002/11/27
22886                 Re:Re:Re:Re:일단 감사드립니다.. 추가 질문 입니다. 수빈 669 2002/11/27
22887                     Re:Re:Re:Re:Re:일단 감사드립니다.. 추가 질문 입니다. 조준회 704 2002/11/27
22918                         Re:Re:Re:Re:Re:Re:일단 감사드립니다.. 추가 질문 입니다. 질문이너무많아서.. 823 2002/11/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.