MdiChild폼(A)에서 ShowModal로 폼(B)을 띄우고 입력을 하다가 또다시 B폼에서 ShowModal로 폼(C)를 띄우려고합니다.그런데 C폼에서 종료버튼을 누르면 C폼은 물론이고 B폼까지 사라지고 A폼만 남습니다. --;;;
제가 설정또는 코딩을 잘못한걸까요? 좋은 답변 부탁드립니다.
(formstyle)/(borderstyle)
폼A : mdichild / single
폼B : stayontop / dialog
폼C : single / dialog
//A폼에서 B폼띄우는 문장
procedure TFRM_UBC120I.BitBtn2Click(Sender: TObject);
begin
Application.CreateForm(TFRM_UBC126I, FRM_UBC126I);
FRM_UBC126I.ShowModal;
End;
end;
//B폼에서 C폼띄우는 문장
procedure TFRM_UBC126I.bt_showdtClick(Sender: TObject);
begin
Application.CreateForm(TFRM_UBC125I, FRM_UBC125I);
FRM_UBC125I.Caption := '작업일';
FRM_UBC125I.ShowModal;
end;
//C폼의 종료버튼(B폼도 동일)
procedure TFRM_UBC125I.BT_exitClick(Sender: TObject);
begin
Close;
end;
//C폼의 종료이벤트(B폼도 동일)
procedure TFRM_UBC125I.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := CaFree;
end;
B폼과 C폼의 종료버튼의 kind는 bkCustom, ModalResult는 mrNone로 되어있습니다.
디버그를 걸어보면 C폼에서 종료버튼을 누르면 자기폼을 닫고난후 B폼으로 와서 FormClose이벤트를 타더군요 이걸 안타게하는 방법이나 아니면 위와 같은 방법이 잘못되었다면 좋은방법을 가르쳐주세요 부탁드립니다 꾸벅~~
ps.요즘들어 제가 질문이 점점 많아지는군요^__^;;;
C폼을 종료한것까지는 이상한점이 없겠죠? 근데 이 C폼을 만드는 곳이
바로 버튼인것 같군요. 아마도 맞으리라 생각합니다.
> //B폼에서 C폼띄우는 문장
> procedure TFRM_UBC126I.bt_showdtClick(Sender: TObject);
> begin
> Application.CreateForm(TFRM_UBC125I, FRM_UBC125I);
> FRM_UBC125I.Caption := '작업일';
> FRM_UBC125I.ShowModal; <=======================
> end;
버튼을 클릭하면 그것의 ModalResult값이 버튼의 부모폼의 ModalResult값으로
들어갑니다. 즉 위의 버튼 bt_showdt 맞나요? 이것의 ModalResult값이 0이 아
니면 C폼을 종료하면 B폼도 바로 종료가 되는것입니다.
왜? B폼의 bt_showdt버튼을 눌린 시점에서 버튼 bt_showdt의 ModalResult값이
B폼에 들어가니까.. 이해가 가시나요?
ShowModal로 호출할땐 폼의 ModalResult에 0(mrNone)이 아닌 값이 들어가면
바로 폼은 종료(종료라기 보다는 ShowModal메소드의 실행이 끝나게 되는것임)가
됩니다.버튼 bt_showdt의 ModalResult값을 mrNone으로 하시면 그러한 일이
없을겁니다.
강혜승 wrote:
> MdiChild폼(A)에서 ShowModal로 폼(B)을 띄우고 입력을 하다가 또다시 B폼에서 ShowModal로 폼(C)를 띄우려고합니다.그런데 C폼에서 종료버튼을 누르면 C폼은 물론이고 B폼까지 사라지고 A폼만 남습니다. --;;;
> 제가 설정또는 코딩을 잘못한걸까요? 좋은 답변 부탁드립니다.
>
> (formstyle)/(borderstyle)
> 폼A : mdichild / single
> 폼B : stayontop / dialog
> 폼C : single / dialog
>
> //A폼에서 B폼띄우는 문장
> procedure TFRM_UBC120I.BitBtn2Click(Sender: TObject);
> begin
> Application.CreateForm(TFRM_UBC126I, FRM_UBC126I);
> FRM_UBC126I.ShowModal;
> End;
> end;
>
> //B폼에서 C폼띄우는 문장
> procedure TFRM_UBC126I.bt_showdtClick(Sender: TObject);
> begin
> Application.CreateForm(TFRM_UBC125I, FRM_UBC125I);
> FRM_UBC125I.Caption := '작업일';
> FRM_UBC125I.ShowModal;
> end;
>
> //C폼의 종료버튼(B폼도 동일)
> procedure TFRM_UBC125I.BT_exitClick(Sender: TObject);
> begin
> Close;
> end;
>
> //C폼의 종료이벤트(B폼도 동일)
> procedure TFRM_UBC125I.FormClose(Sender: TObject;
> var Action: TCloseAction);
> begin
> Action := CaFree;
> end;
>
> B폼과 C폼의 종료버튼의 kind는 bkCustom, ModalResult는 mrNone로 되어있습니다.
> 디버그를 걸어보면 C폼에서 종료버튼을 누르면 자기폼을 닫고난후 B폼으로 와서 FormClose이벤트를 타더군요 이걸 안타게하는 방법이나 아니면 위와 같은 방법이 잘못되었다면 좋은방법을 가르쳐주세요 부탁드립니다 꾸벅~~
>
>
>
> ps.요즘들어 제가 질문이 점점 많아지는군요^__^;;;
>
>