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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[897] [Forms] Modal Form에서 ModalResult 설정시 주의할점
장성호 [nasilso] 14002 읽음    2009-06-29 19:53
개인적으로 Modal Form을 만들때 ModalResult값을
Botton 컴포넌트를 이용하지 않고  Coding으로 설정한다.

그런데 분명 ModalResult값을 mrOk등으로 설정했는데..
전혀 원하지 않는 값인 mrCancel이  나오는 경우가 있다.

아래와 같이 코딩하면 항상 ModalResult값이  mrCancel이 나온다.
분명 ModalResult값을 mrOk로 설정했는데 왜 그럴까?
void __fastcall TForm3::Button1Click(TObject *Sender)
{
   ModalResult=mrOk;
   Close();
}



그 이유는 TCustomForm의 Close함수에 있다.

다음의 TCustomForm의 Close함수이다.
아래 코드를 잘보면
Form이 Modal폼일경우 ModalResult값을 Default로 mrCancel을 주고있다.
procedure TCustomForm.Close;
var
  CloseAction: TCloseAction;
begin
  if fsModal in FFormState then   //여기서 Modal폼이면 modalresult값을 디폴트값으로 설정 
    ModalResult := mrCancel
  else
    if CloseQuery then
    begin
      if FormStyle = fsMDIChild then
        if biMinimize in BorderIcons then
          CloseAction := caMinimize else
          CloseAction := caNone
      else
        CloseAction := caHide;
      DoClose(CloseAction);
      if CloseAction <> caNone then
        if Application.MainForm = Self then Application.Terminate
        else if CloseAction = caHide then Hide
        else if CloseAction = caMinimize then WindowState := wsMinimized
        else Release;
    end;
end;


Close를 나중에 호출하면 항상 mrCancel이 ModalResult값으로 나오는것이다.

다음과 같이 간단히 순서만 바꿔주면 문제 해결

void __fastcall TForm3::Button1Click(TObject *Sender)
{
   Close();
   ModalResult=mrOk; // 반드시 Close후에  ModalResult값을 설정해준다.
}


별것 아닌데 가끔 깜박할때도 있구
어디에 자세히 설명해주는곳도 없어 종종  실수하는경우가 있다.

그럼..
김태선 [cppbuilder]   2009-07-03 10:15 X
Close()는 굳이 안해줘도 됩니다.

void __fastcall TForm3::Button1Click(TObject *Sender)  
{  
   ModalResult=mrOk;
}
장성호 [nasilso]   2009-07-03 11:26 X
ㅋ 그렇군요.

Close를 해둬야 Form이 닫힌다는게 눈으로 보여서..
그게 습관이 되서..
아루스 [tinydew4]   2010-07-19 15:10 X
Modal 폼의 경우 ShowModal 함수에서 ModalResult 가 0 이 아니면 반환하게 되 있어서 Close 가 필요없고
Modaless 폼의 경우는 Close 를 해 줘야하는 차이죠. ㅋ

+ -

관련 글 리스트
897 [Forms] Modal Form에서 ModalResult 설정시 주의할점 장성호 14002 2009/06/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.