빌더(TWx) 님이 쓰신 글 :
: 라이손레종 님이 쓰신 글 :
: : 님이 쓰신 글 :
: : : OnCreate 이용하면 될거 겉은데요
: : :
: : : 라이손레종 님이 쓰신 글 :
: : : : 안녕하세요 ?
: : : : Q&A를 아무리 찾아도 비슷한 것 을 찾지 못했습니다.. 유사한 질문은 있었지만.. 난이도가 있는 내용이어서.. 해석을 못했습니다.
: : : :
: : : : 질문 ]
: : : : Form1이 활성화 된 후 자동으로 Form2를 띄우고 싶습니다.
: : : :
: : : : Form1::FormCreate , StratDock , FormShow ( 기능을 잘몰라 이벤트에 하나씩 테스트 해보았습니다 )
: : : : 했지만.. 에러와 .. 구현이 안됩니다..
: : : : 버튼으로 Form2->Show();를 할 땐 간단했는데..
: : : :
: : : : 바쁘시더라도.. 잠시만.. 저의 질문에 답글을 부탁드려봅니다..
: :
: : 해보았는데.. 안되었습니다.. 다시금
: : Events의 OnCreate를 더블클릭해서
: : Form1::FormCreate(TObject *Sender) { Form2->Show(); }
: : 해보았지만.. 컴파일시
: : Access violation at address 50C27C3F in module 'vcl250.bpl' Read of address 000003CC.
: : 쇼메시지가 나타나고 확인하면 실행은 되지만.. Form2가 Show 되지는 않았습니다.
: : Form1의 Button1에 Form2->Show();를 넣어 두었는데.. 버튼을 누르면 잘 나타납니다.
: :
: : 제생각입니다만..
: : Q&A를 살펴보면 Form1이 완전히 실행되기전에 Form2를 Show하려 해서 기능이 활성화 되지 못하는거 같은데..
: :
: : 간단할듯한데.. 안되네요..
:
:
:
:
:
: 답변:
:
:
: TForm2가 생성되기 전에 null pointer를 액세스 해서 발생하는 예외이므로
:
: Project Options -> Application -> Forms 로 들어가서...
: Auto-create forms 에 포함되어 있는 Form2 를 Available forms로 빼주고
:
: 아래와 같이 처리...
:
:
: void __fastcall TForm1::FormCreate(TObject *Sender)
: {
: if(Form2 == nullptr) {
: Form2 = new TForm2(this);
: Form2->Show();
: }
: }
:
:
: Form2가 Auto-create forms에 포함되어 있으면...
: Project1.cpp 파일이 IDE에 의해서 다음과 같이 구성되기 때문에
:
: Application->CreateForm(__classid(TForm1), &Form1);
: Application->CreateForm(__classid(TForm2), &Form2);
:
:
: Application->CreateForm(__classid(TForm1), &Form1); 에 의해서
:
: TForm1::FormCreate() 이벤트 핸들러가 호출되므로
: 이벤트 핸들러에서 아직 생성되지 않은 From2를 사용하는 결과가 되어 null point 액세스가 발생하는 것임.
:
:
: Auto-create forms 에 포함되어 있는 Form2 를 Available forms로 빼주고
: 위와 같이 처리하면 됌.
:
:
감사합니다~~! 빌더님 덕분에 해결하였습니다.
복 많이 받으세요 빌더님~!