如何实现打开一个窗体时进行判断,如果满足条件则显示,不满足则关闭。我这样写不行,请各位高手指正。procedure Tf_update.RzBitBtn1Click(Sender: TObject);
begin
  if 条件 then
  ……
  else
  Close;
end;procedure Tf_update.RzBitBtn2Click(Sender: TObject);
begin
  Close;
end;procedure Tf_update.FormShow(Sender: TObject);
begin
  RzBitBtn1Click(Sender);
end;

解决方案 »

  1.   

    不是很明白Lz的意思,是想不让窗体创建还是不让其显示呢?
    可以试下如下方法:
    1)把你的事件写在FormCreate中
    2)把你的事件写在FormActive中
    3)如果是通过按钮进行,可以先判断条件,然后用Hide、Show方法
    如下:
    Procedure ButtonClick
    begin
      if 你的条件 then
      begin
        YourForm.Show;
      end
      else
        YourForm.Hide;
    end;
      

  2.   

    在窗体的FormShow事件里调用Close方法是无效的,有两种方法解决:
    1. 在窗体打开之前判断。
       if 条件满足 then
        YourForm.Show //.ShowModal;
       else
         做其他处理,或什么也不做。2. 在YourForm中创建计时器,在OnTimer()事件里处理是否需要打开窗体。
      

  3.   

    function Tmain.FindForm(caption: string): bool;
    var
    i:integer;
    begin
     for i:=0 to main.MDIChildCount do
      begin
       // 通过对窗体标题判断窗体是否存在
        if main.MDIChildren[i].Caption=caption then
         begin
          //如果窗体已存在,则恢复窗体,并返回true
          SendMessage(mdichildren[i].Handle, WM_SYSCOMMAND, SC_restore, 0);
          mdichildren[i].Enabled:=true;
          mdichildren[i].Show;
          mdichildren[i].SetFocus;
          result:=true;
          break;
         end
         else
         //如窗体不存在,则返回false,程序将创建窗体
          result:=false;
      end
    end;
    -------------
    procedure Tmain.N2Click(Sender: TObject);
    var
    newform:TSecSetting;
    begin
    if findForm('会计科目设置')=false then
     begin
       //若窗体不存在,则创建窗体
       newform:=Tsecsetting.Create(application);
       newform.Caption:='会计科目设置';
      end;
    end;//判断是否存在窗体并创建
      

  4.   

    各位说得对,是思路有问题,想到死路去了。呵呵,看来是做得头昏了,在窗体打开的同时判断自己是否要打开本来就是死路。谢谢各位,还是学到了东西,不过如果非要这样做,用suihu的方法可行吗,大家说说看。
      

  5.   

    1  写个public函数 CanShowModalvar
      frm: TMyForm;
    begin
      frm := TMyForm.Create;
      if frm.CanShowModal then
        frm.ShowModal;
    end;2  在FormShow中判断  调用PostMessage(self.Handle,WM_QUIT,0,0)关闭