|
수얍니당.
올리신 소스 그대로 테스트를 해봤습니다.
전혀 문제 없더군요.
다른 부분의 문제일 것 같습니다.
1. 메모리 침범
2. Obj가 엉켜서 메모리가 뒤죽박죽현상
1번 해결방법
memset이나 메모리 연산부 등 메모리 초기화나 배열사용, 포인터 사용에 있어 문제가 발생하여 해당부분의 메모리값을 초기화 혹은 0으로 바꾸고 계실 가능성이 있습니다. 전체적인 디버깅을 통해서 메모리 침범이 일어나고 있지 않은지 확인하셔야 합니다.
기본 소스에 문제가 없음을 확인하시기 위해서는 새 프로젝트에 올리신 소스만 추가하여 실행해보시면 정상적임을 확인하실 수 있습니다.
기본소스만 올렸는데 문제가 발생한다면
Tfrmfuntion
TfrmSubbutton
TfrmRecipe
TfrmRecipeSubbutton
의 생성부 및 초기화, 등등의 모든 부분을 확인하시는게 좋을것 같군요.
기본적으로 확인하시려면 위의 폼들을 넣지 않은채 그냥 TForm과 TButton의 기본으로 생성하여 테스트하십시요.
(예제)
SCREEN_LIST.pScreen[0] = new TForm( this );
SCREEN_LIST.pScreen[0]->Parent = this ;
SCREEN_LIST.pButton[0] = ( TForm* ) new TButton(this );
SCREEN_LIST.pButton[0]->Parent = this ;
SCREEN_LIST.pScreen[1] = new TForm(this );
SCREEN_LIST.pScreen[1]->Parent = this ;
SCREEN_LIST.pButton[1] = ( TForm* ) new TButton(this );
SCREEN_LIST.pButton[1]->Parent = this ;
2번 해결방법
프로젝트 폴더내의 Obj 파일을 모두 제거하십시오.
그후 다시 빌드를 통해 재실행 해보시기 바랍니다.
걸음마 님이 쓰신 글 :
: 생성한 폼을 TMain에서도 보여(show())주고
: 다른 서브버튼 폼을 만들어서 그 폼에서도
: 다른 폼을 불러오려고 합니다.
: 그래서 헤더파일을 하나 만들어서 구조체를 만들었습니다.
: 그 구조체에 아래와 같이 각각의 폼의 포인터를 배열에 넣습니다.
:
:
: ###### DataStruct.h #########
:
: struct SCREEN {
: TForm* pScreen[30];
: TForm* pButton[30];
: int i;
: };
:
: struct SCREEN SCREEN_LIST;
:
: ###### TMain 부분 ##########
: __fastcall TMain::TMain(TComponent* Owner)
:
: void __fastcall TMain::InitForm()
: {
: SCREEN_LIST.pScreen[0] = new Tfrmfuntion(pnlMain);
: SCREEN_LIST.pScreen[0]->Parent = pnlMain;
:
: SCREEN_LIST.pButton[0] = new TfrmSubbutton(pnlRight);
: SCREEN_LIST.pButton[0]->Parent = pnlRight;
:
: SCREEN_LIST.pScreen[1] = new TfrmRecipe(pnlMain);
: SCREEN_LIST.pScreen[1]->Parent = pnlMain;
:
: SCREEN_LIST.pButton[1] = new TfrmRecipeSubbutton(pnlRight);
: SCREEN_LIST.pButton[1]->Parent = pnlRight;
:
:
: }
: 이렇게 버튼을 눌렀을때 폼을 보여줍니다.
: void __fastcall TMain::ToolButton2Click(TObject *Sender)
: {
:
: SCREEN_LIST.pScreen[0]->Show();
: SCREEN_LIST.pButton[0]->Show();
: }
:
: 똑같이 다른 폼에서 폼을 보여주기위해 다음과 같이 합니다...
: ####### TfrmSubbutton 부분 ################
: void __fastcall TfrmSubbutton::ToolButton1Click(TObject *Sender)
: {
: if(SCREEN_LIST.pScreen[1] != NULL)
: SCREEN_LIST.pScreen[1]->Show();
:
:
: }
:
: 근데 if문에서 참이 되지 않아 그냥 나가버립니다.
: TMain부분에서 구조체에 값을 넣어 줬는데 왜 if문에서 걸리지 않고 나가버리는지 모르겠습니다.
: 고수님들의 답변 부탁드립니다.
|