Modal Form을 만들고 Botton 컴포넌트를 이용하지 않고 Coding으로 ModalResult값을 설정할 때, 분명히 ModalResult값을 mrOk 등으로 설정했는데 mrCancel이 나오는 경우가 있다.
아래와 같이 코딩하면 항상 ModalResult값이 mrCancel이 나온다.
분명 ModalResult값을 mrOk로 설정했는데 왜 그럴까?
ModalResult=mrOk;
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값으로 나온다는 것이다.
따라서 다음과 같이 간단히 순서만 바꿔주면 문제가 해결된다.
Close();
ModalResult=mrOk; // 반드시 Close후에 ModalResult값을 설정해준다.
|
별것 아닌데 가끔 깜박할때도 있고, 어디에 자세히 설명해주는곳도 없어 종종 실수하므로 적어 둔다.
'탐고루주의 끄적임' 카테고리의 다른 글
MS SQL Server의 설치, 원격 접속, 네트워크의 파일 공유 (5) | 2024.09.16 |
---|---|
SQL Server 설치 후 추가하여 처리할 사항 (0) | 2024.09.15 |
MSSQL에서 최대값의 Row를 추출하는 방법 (0) | 2024.08.04 |
德建名立(덕건명립) (0) | 2024.07.29 |
북유럽 기행 (6) | 2024.06.16 |