当然啦,以前在form2里面写的时候如果是自动创建就会有一个全局变量
fomr2在,所以fomr2引用正常,现在你的form的名字,虽然也是fomr2
但是已经不是全局的了,在from2的单元 中引用当然不可以啦,没有这个
变量啦!
都是一个道理啦,fomr2的生存期只在你声明的这一个procedure 或者function 里面!
fomr2在,所以fomr2引用正常,现在你的form的名字,虽然也是fomr2
但是已经不是全局的了,在from2的单元 中引用当然不可以啦,没有这个
变量啦!
都是一个道理啦,fomr2的生存期只在你声明的这一个procedure 或者function 里面!
这是不必要的,因为有默认的。不过如果这一个函数不在tfom2类里面的
话可要注意了
procedure TForm2.FormCreate(Sender: TObject);
var
form3:tform3;
begin
form3:=tform3.Create(form2);
end;
就是form3在form2创建的时候创建,且在form2里面要调用form3
如果是这样的话,其实也是一样的,你就是要传入fomr2是吧?
把create(fomr2)改成create(self);
就可以了
你的原程序就是要把fomr2传递到fomr3的create函数中
去吗?我叫你把它改成self就OK了,你只要在fomr3的
创建函数中用
var
Form2:TForm2;
begin
Form2:=TForm2(AOwner);
.
.
.
end;
这样一来就什么都不用改了,不过如果你的fomr3的单元里有其它
函数有引用到form2的,你就要上面那个fomr2的声明放到类里面去
不能放到这一个函数的头部了
不过你还是问一问chechy它们这些2 3 个五角星的也许一下子
就搞定了
当你把Form2, Form3作为局部变量声明时,局部变量隐藏全局变量,而你在Form2里
编程序时用Form2变量是用的全局变量,而此时又没创建,自然出错
Form3也一样
implement之前有一个
var段,在var之后声明的就是全局变量!
因为如果你没改的话
Form2已经被声明为全局变量了
Form3也一样procedure TForm1.N4Click(Sender: TObject);
begin
form2:=tform2.Create(self);
form2.ShowModal;
end;
monnet
我在你的文件这样就行阿
编译通过阿
procedure TForm2.FormCreate(Sender: TObject);
begin
form3:=tform3.Create(self);
end;另外我觉得你还是这样吧
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// form2.Free;
Action := caFree;
form3.Free;
end;