请问各位:
   如何实现Vb中CausesValidation功能,在Delphi中;
   也就是说在一个窗体中如何在点击“关闭”按钮时,不触发其他控件的OnExit属性,从而不进行有效性检验。我说的是点击窗体上自己放置的“返回”“关闭”之类的按钮
   谢谢!

解决方案 »

  1.   

    好办,在点击“关闭”按钮时,将其他控件的Enabled := FALSE.
      

  2.   

    试试吧:
    全局BlnOnClose变量一个,
    在窗口OnClose过程中,把BlnOnClose设置为真,
    在控件的OnExit过程中,
    if BlnOnClose = True then
      Exit
    else
      {你的控件失去焦点的代码。};
      

  3.   

    我的办法用简单的两个Edit时可以通过,两过程代码如下。
    procedure TForm1.Edit1Exit(Sender: TObject);
    begin
      if Bln = True then
        Exit
      else
      ShowMessage('Bad Method!');
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Bln := True;
      if MessageBox(Application.Handle,'Really Exit?',
        'OnClose',mb_YesNo+mb_IconQuestion) = mryes then
        begin
        Action := caHide;
        Application.Terminate;
        end
      else
        Action := caNone;
        Exit;
    end;不过你的程序也许就不同了。
      

  4.   

    设置一个全局变量boolPriSign=true
    在OnExit事件里
      if boolPriSign then
      begin
        校验
      end;
    在"关闭"事件里
      boolPriSign:=false;
      

  5.   

    引用“点击关闭按钮时,校验代码没有执行完呢,所以根本就不会执行关闭按钮中的任何代码”??????
    你是不是用线程去做的?校验代码和关闭的事件写在两个线程里了?如果不是的话,则没有办法退出,必须等到校验代码的程序结束后,因为如果你没有启一个新线程,则操作系统会把所有的程序都放在主线程里去执行,所以你必须等到上一个事件执行完后才能再对下一个事件进行处理。系统是不会同时为一个线程中的不同事件“同时”分配CPU时间的。如果你是用的是多线程,则可以实现,但是要考虑是否有必要和是否应该用。对于数据校验不建议用。