请教各位:Form1.close 和 close 有什么区别?(200分)

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

liuchengr

Unregistered / Unconfirmed
GUEST, unregistred user!
窗体1(Form1)中的一个按钮代码如下:
procedure TForm.Button1Click(Sender: TObject);
begin
Form1.Close;
end;
我在另一个窗体里动态创建窗体1并用showmodal打开,点击button1出错。而如果窗体1在application中创建就正确。
当把Form1.Close;改成Close;不该是在哪里创建都能正常运行。
请问他们之间有什么区别??

 
区别大了。
TForm是个类,可以创建很多实例。其中,Delphi为了方便自动定义了一个实例名为Form1。
缺省创建的实例就是这个实例。但是你也可以自己创建其他名字的实例,如Form2、Form3。
Button1Click中使用Close可以确保关闭的都是当前实例窗口。而Form1.close仅仅只能关闭
Form1实例。因此如果此时实例不是Form1时是要出错的。
 
procedure TForm1.Button1Click(Sender: TObject);
begin
form2:=tform2.create(self);
form2.showmodal;
form2.free;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
form2.close;
end;

没有报错呀
 
你应该用CLOSE而不是FORM1.CLOSE.
CLOSE表示当前表单的CLOSE,而FORM1.CLOSE是表示FORM1的CLOSE.你在动态生成的FORM中调
用FORM1.CLOSE,当然要出错.因为也许这会儿FORM1表单根本都没有,而你去调用它的CLOSE当
然会出错.所以,你改为CLOSE则是关闭当前表单,无论如何都不会出错.
 
procedure TForm1.Button1Click(Sender: TObject);
begin
form3:=tform2.create(self);
form3.showmodal;
form3.free;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
form2.close;
end;
这样试试。
 
上面的程序编译能过吗?
Form2好象没有定义啊。
 
如果在Form1单元文件中以“Tform1.***”开头的函数或过程中使用,这时标准写法是“Close”或“self.close”
而不应是“form1.close”,因为它是在“类”中使用。

其他情况下,就要用“form1.close”。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部