개인적으로 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값을 설정해준다.
}
별것 아닌데 가끔 깜박할때도 있구
어디에 자세히 설명해주는곳도 없어 종종 실수하는경우가 있다.
그럼..
|
void __fastcall TForm3::Button1Click(TObject *Sender)
{
ModalResult=mrOk;
}