procedure TbalanFrm.BitBtn2Click(Sender: TObject);
begin
if messagebox(self.Handle,'你確定要退出該界面嗎?','提示',MB_YESNO OR MB_ICONINFORMATION)=IDYES then
begin
close;
end;
end;
这个过程一运行,要弹出二个提示界面来,要按二次YES,很烦人,不知大家是怎样解决的,如果close改成application.Terminate;就没有问题,但是我在这里只想关这个界面,并不想退出整个程序。急盼解决办法。

解决方案 »

  1.   

    退出判断逻辑我习惯放在主窗体的OnCloseQuery事件里面。
    处理这个事件的CanClose参数就可以。
    致于MessageBox函数,调用一次,怎么会显示两个box出来,我可能没有懂你的意思,也许你的程序逻辑上下文需要看下才知道。
      

  2.   

    是的,这两个界面的出现是,在close动作时,又触发了
    procedure Tfrmuser.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    label8.Caption:='';
    if messagebox(self.Handle,'你確定要退出該界面嗎?','提示',MB_YESNO OR MB_ICONINFORMATION)=IDNO then
    begin
    abort;
    end;end;
    这个事件,但不知为何会触发这个事件,在用close时;不知怎样处理
      

  3.   

    执行TbalanFrm.BitBtn2Click并点确定后,窗口关闭当然会触发FormClose,而在FormClose里你同样有messagebox所以就又提示了一次,如2楼,你可以在OnCloseQuery里写begin 
    if messagebox(self.Handle,'你確定要退出該界面嗎?','提示',MB_YESNO OR MB_ICONINFORMATION)=IDNO then 
    begin 
    canclose:=FALSE; 
    end; 
    end;OnCloseQuery执行在close前
      

  4.   

    也可以在close事件里设置Action的值
    caNone不对窗体进行处理
    caHide隐藏窗体
    caFree关闭并释放所占内存
     ...
      

  5.   

    procedure TbalanFrm.BitBtn2Click(Sender: TObject); 
    begin 
    if messagebox(self.Handle,'你確定要退出該界面嗎?','提示',MB_YESNO OR MB_ICONINFORMATION)=IDYES then 
    begin 
      hide; 
    end; 
    end; 
      

  6.   

    用hide是不行的,因为我是以独占的方式打开,虽则隐藏了,可主窗体却不能操作了,至于放在OnCloseQuery里写也不行,同样触发OnCloseQuery里的代码,只是这个在前触发,OnClose在后触发而已
      

  7.   

    OnCloseQuery做一次判断就行了嘛.为什么还要在close里还要做判断,你自己的逻辑没理好。
      

  8.   

    close事件里设置Action的值 
    Action:=caHide;  隐藏窗体 ,但未消失,程序依然可以对窗体进行控制。这是单窗体的默认值
      

  9.   

    谢谢fenger8293一语惊醒梦中人,我明白了,是啊用一个就行了
      

  10.   

    执行TbalanFrm.BitBtn2Click并点确定后,窗口关闭当然会触发FormClose,而在FormClose里你同样有messagebox所以就又提示了一次,如2楼,你可以在OnCloseQuery里写我没说明白???伤心,无语!!