请教一下,这个语句怎么写?
  如果name为'a'的窗体存在,则显示窗体a ,如果不存在,则创建a 
  谢谢!

解决方案 »

  1.   

    if a=nil
    a.create
    else
    a.show
      

  2.   

    If   not Assigned(Form3) Then  
       begin
           Application.CreateForm(TForm3, Form3);
           Form3.show;
       end
      else  Form3.Show;
      

  3.   

    try
      Form3.show;
    except
      Application.CreateForm(TForm3, Form3);
      Form3.show;
    end;
      

  4.   

    抱歉,漏了一点,如果这个窗体a即使存在也是动态创建的,如果它还没有创建我将连a都取不到该怎么办呢?
    举个例子说就是点击button1,动态创建了窗体a(a应该是个变量吧,因为我还要创建b,c...),再次点击button1的时候,如果它没有被关闭就显示它。代码怎么写呢?我照楼上几位的方法做了,好象都不行,谁能再个看一下,谢谢。
      

  5.   

    补充一点,也就是说,怎样判断是否存在一个name='a'的窗体,不知道这样描述大家能不能明白。谢谢
      

  6.   

    那要看你的变量a在button1click外面是否可见,如果不可见的话是不能判断的。
    要想判断也只能通过句柄了。FindWindow
      

  7.   

    FindWindow怎么用,哪个lpClassName 如果是TForm的话该怎么写?谢谢
      

  8.   

    我用findwindow(nil,'a')得到这个窗体存在,怎么把它找到再Show出来呢?谢谢!
      

  9.   

    你的意思是根据一个窗体name的字符串打开一个窗体吧,可以这样实现。var
      TmpFormClass:tformclass;
      TmpFormName:String;
      TmpHandle:TCustomForm;
    begin
      TmpFormName='窗体name的名称';
      TmpFormClass:=Tformclass(findclass('T'+TmpFormName)); //前边加了个T,因为"类名=T+窗体名"
      if TmpFormClass<>NIL then  //找到这个类了
        TmpHandle:=TmpFormClass.Create(application)  //打开这个窗体
      else
        //显示窗体不存在
    end注意:最后别忘在程序里声明一下你要用这种方式打开的类,在主程序里的最后加上
    initialization
     RegisterClasses ([T窗体名1,T窗体名2]);
    finalization
     UnRegisterClasses ([T窗体名1,T窗体名2]);=============
    师傅领进门,修行在个人,怎么领会,就是你个人的事了!
    Delphi博大精深,只有想不到,没有做不出的!
      

  10.   

    因为form是动态创建的,不能确定它有几个,而且name属性的值是在创建的时候赋给它的,所以再请教一下楼上怎么注册这些form,谢谢
      

  11.   

    你是說多文檔界面嗎?你的意思說當前窗口不是你要打開的窗口,如果你現在要打開那個窗口,如果存在就設為當前窗口,不存在就創建並打開它。是這相意思嗎?
    注意下面一定要是childform才行。
    if a=nill then
      a:=Ta.create(application)
    else
      a.設為當前窗口