function Test :Boolean;
var
  Form1 : TForm1;
begin
  if Form1 = nil then
    ShowMessage('nil')
  else
    ShowMessage('not nil');
  if Not Assigned(Form1) then
    ShowMessage('not assigned')
  else
    ShowMessage('assigned');
end;在这个例子中,Form1 只是声明了,但是,显示是 assigned 和 nil.问题:
1,上面的情况,请问这是为什么?
2,现在有一Button1,当Click后,想让Form1.Show ,同时,再点Button1,还是显示原先那个Form1,而不是开第二个Form1,请问该如何做?

解决方案 »

  1.   

    var一个变量后,即分配了地址空间,也就是说"Assigned"
    nil是因为尚未Create
    这种变量一般要在CLose or Free时
    Form1 :=nil
    才能在下次使用时,不出问题。
      

  2.   


    创建的时间,用
     if not assigned(form1) then
      application.createform(Tform,Form1);
     form1.show;在form1的Onclose事件中,action:=cafree;
    在form1的Ondestory事件中,form1:=nil;
      

  3.   

    Form1:=TForm1.create(Self)没有赋值,能不为nil吗??
      

  4.   

    回答问题2:定义一个变量,你可以设为BUTTON的CAPTION
    Click后,CAPTION为打开二,再CILCK CAPTION 为打开一
    然后根据CAPTION 打开窗体
      

  5.   

    在我的电脑,显示的是
    not nil
    Assigned
    你再试下!!!
      

  6.   

    刚才上面写错了,结果是 assigned  和 not nil.“Form1:=TForm1.create(Self)  
     
    没有赋值,能不为nil吗?? ”恩,你看看,没有赋值,结果就是 not nil 了。
      

  7.   

    function  Test  :Boolean;  
    var  
       Form1  :  TForm1;  
    begin  
       if  Form1  =  nil  then  
           ShowMessage('nil')  
       else  
           ShowMessage('not  nil');  
       if  Not  Assigned(Form1)  then  
           ShowMessage('not  assigned')  
       else  
           ShowMessage('assigned');  
    end;  
     
    在这个例子中,Form1  只是声明了,但是,显示是  assigned  和  not nil.  
     
    问题:  
    1,上面的情况,请问这是为什么?  
    2,现在有一Button1,当Click后,想让Form1.Show  ,同时,再点Button1,还是显示原先那个Form1,而不是开第二个Form1,请问该如何做?刚才写错了,所以,估计楼上的几位都分析错了。只有一位兄弟测试了。请问这是怎么回事?该怎么分析?
      

  8.   

    原因:
    局部变量 Form1 编译器初始化的时候不会将Form1设置为nil,而是一个随机值
    全局变量会置为nil
    而你的写法全部是判断是否是nil,所以得到的结果和你想象的不一样
    -----------
    只要把Form1 声明成全局变量就可以了
      

  9.   

    恩,cll007(gazo)的想法和我一样,多谢。最后请问,避免重复开辟这样的窗体一定要用一个变量或者前面一位兄弟所说的方法(其实这个方法我感觉还不如用变量,caption的话,按纽的文字都要变了)???还是有更好的方法?解决问题后,分数会送上,会把分数加到50分。
      

  10.   

    保证窗体是 全局变量
    1.此时可以用
    if not assigned(Form1) then /或者 if Form1=nil
      创建
    Form1.Show;//Form1.ShowModel; FreeAndNil(Form1);
    ---------
    如果Form1是MDIChild,那么Form1的Close里面写action:caFree;
    Form1的Destory里面写Form1:=nil