当第一次按下 Button1 时 f_tank 正常打开,再关闭,按下 Button1 第二次打开却出错 ( 积分: 0 )

  • 主题发起人 主题发起人 chzhwenfigo
  • 开始时间 开始时间
C

chzhwenfigo

Unregistered / Unconfirmed
GUEST, unregistred user!
有多个MDI 子窗体,用以下方式打开:

function TF_main.findform(fname:string):boolean
//自定义函数,查找窗体;
var
i:integer;
begin
for i:=0 to screen.formcount-1 do
begin
if screen.forms.name=fname then
begin
screen.forms.show;
findform:=true;
exit;
end;
end;
findform:=false;
end;

然后调用以上函数:

procedure TForm1.Button1Click(Sender: TObject);
begin
if not assigned(f_tank) then // f_tank 为其中一个窗体;
begin
f_tank:=tf_tank.Create(application);
if findform('f_tank') then
begin
f_tank.WindowState:=wsnormal;
exit;
end;
end
else
f_tank.BringToFront;
end;

当第一次按下 Button1 时 f_tank 正常打开,再关闭,按下 Button1 第二次打开却出错了: Abstract Error 不知什么原因?
 
有多个MDI 子窗体,用以下方式打开:

function TF_main.findform(fname:string):boolean
//自定义函数,查找窗体;
var
i:integer;
begin
for i:=0 to screen.formcount-1 do
begin
if screen.forms.name=fname then
begin
screen.forms.show;
findform:=true;
exit;
end;
end;
findform:=false;
end;

然后调用以上函数:

procedure TForm1.Button1Click(Sender: TObject);
begin
if not assigned(f_tank) then // f_tank 为其中一个窗体;
begin
f_tank:=tf_tank.Create(application);
if findform('f_tank') then
begin
f_tank.WindowState:=wsnormal;
exit;
end;
end
else
f_tank.BringToFront;
end;

当第一次按下 Button1 时 f_tank 正常打开,再关闭,按下 Button1 第二次打开却出错了: Abstract Error 不知什么原因?
 
Abstract Error 指针问题,对象未创建或已经释放了,还调用它的成员
 
第一次f_tank被Create然后你关闭它,这时f_tank指向的对象已经被释放,但f_tank并没有被置为nil(不论是c或Delphi 释放指针后编译器都没义务的将指针赋0或nil)
所以第二次点击后由于f_tank<>nil 于是到f_tank.BringToFront;处自然报指针错误
 
接受答案了.
 
后退
顶部