怎么老出错?(50分)

  • 主题发起人 主题发起人 luoma
  • 开始时间 开始时间
L

luoma

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.N9Click(Sender: TObject);
begin
IntForm:=TIntForm.Create(Self);
IntForm.Showmodal;
end;
procedure TIntForm.Button1Click(Sender: TObject);
begin
IntForm.Free;
end;
编译时没有错,但运行时,只要Button1Click就报错'Abstract error'
 
procedure TForm1.N9Click(Sender: TObject);
begin
IntForm:=TIntForm.Create(Self);
IntForm.Showmodal;
IntForm.Free;
end;
procedure TIntForm.Button1Click(Sender: TObject);
begin
IntForm.close;
end;
 
procedure TIntForm.Button1Click(Sender: TObject);
begin
// IntForm.close;
Close;
end
 
对于普通方式显示的窗体,如Show用窗体名.Free可以,但是用ShowModal方式显示的窗体
就比较特殊了,Delphi为了保证该窗体以模态方式显示做了一些工作,将其它窗体设为不
激活状态,然后再激活该窗体,并为其专门设计了自己的消息循环,其退出条件就是
ModalResult <> 0。而在窗体的Free方法中并没有给出这一条件,只是简单的Destroy而已。
而在窗体的Close中有这一判断,假如目前窗体是处在模态状态,则做一些处理工作,关毕该
窗体并激活调用窗体,使程序恢复原状。所以,你应用Close而不能用Free,以保证Delphi
做自己的后台处理工作。
 
这样是没错,但IntForm.free之后,不是就不存在IntForm吗,我都被搞混了。麻烦
解释一下
 
Archerfl兄:我试了一下,即使show,也不能free.
 

IntForm:=TIntForm.Create(application);
 
Form.close之后,是不是Form就被free掉了
 
是不是执行到Showmodal后,Form1便停止运行,直到IntForm关闭之后,再返回执行Free?
我想应该是这样。
 
IntForm.Create和IntForm.Free是不是必须要在同一个作用域?
 
后退
顶部