我在BCB中写:
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
if(Form2->ShowModel()==mrok)
//检查发现this->ModelResult=2; (mrcancel=2)
}
void __fastcall TForm2::BitBtn1Click(TObject *Sender)
{
ModelResult=mrok;(mrok实际值是1)
Close();
}
查看VCL源码才发现:
procedure TCustomForm.Close;var CloseAction: TCloseAction;begin if fsModal in FFormState then 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;
想了想,
...
if FormStyle = fsMDIChild then if biMinimize in BorderIcons then CloseAction := caMinimize else CloseAction := caNone else CloseAction := caHide; //模式窗体CloseAction := caHide,我调用Close()其实就是执行了Hide(),并没有释放窗体
....
if Application.MainForm = Self then Application.Terminate else if CloseAction = caHide then Hide //Hide else if CloseAction = caMinimize then WindowState := wsMinimized else Release;
最后改成这样了
void __fastcall TForm2::BitBtn1Click(TObject *Sender)
{
ModelResult=mrok;(mrok实际值是1)
Hide();
}
xgbing 认证博客专家 驱动开发 arm开发 嵌入式硬件 专注于嵌入式方向的软硬件设计与开发(ASM\C\C ,RTOS,Linux,android,以太网\嵌入式网络协议栈,蓝牙,WIFI,文件系统/嵌入式存储,显示\音频,单片机\DSP\ARM\Cortex,电路设计\PCB布板\硬件驱动\数字逻辑CPLD,FPGA\niosII),目前从事VirtualBox\qemu\KVM虚拟化研究工作。