如果我申明一个类
var
TmpFrm :TForm1;
begin
TmpFrm := TForm1.Create(application);
TmpFrm.Free;此时
TmpFrm指针指向的哪里啊,他好像不是Nil啊,要怎么才能知道tmpFrm已经被释放了呢
var
TmpFrm :TForm1;
begin
TmpFrm := TForm1.Create(application);
TmpFrm.Free;此时
TmpFrm指针指向的哪里啊,他好像不是Nil啊,要怎么才能知道tmpFrm已经被释放了呢
//检查窗体是否已经打开过了
for i:=0 to screen.FormCount-1 do
begin
if screen.Forms[i].Name=formname then //证明该窗体已经被打开过了,把它BringToFront就行了
begin
screen.Forms[i].BringToFront;
exit;
end;
end;
//没有打开,就重新打开
.....
Assing(TmpFrm)为true
如果这个Tmpfrm是全局的呢
和偶的办法也差不多,偶现在的判断是
if (not assing(TmpFrm)) or (not (TmpFrm is TForm)) then
TmpFrm := TForm1.Create(); getit911(Windows转Linux中)所说FreeAndNil
那么假如
TmpFrm := TForm1.Create(Form2);当Form2被Free之后,TmpFrm又是指到哪里呢
因为这个TmpFrm是通过Owener释放而释放的,所以代码没有地方写
全局变量就更不要用了,你永远不能确定有没人给全局变量重新赋值了,要记住,变量实质上只是指针,不代表任何实例。
如果你对某个特定的Form进行操作,那么用Screen.Forms或Application.MainForm.MDIChildren来查找特定的Form,再进行操作。