关于模态窗体的问题,一关闭就死机,怎么回事?
有两个窗体,form1为主窗体,form2为模态窗体。将form2在自动建立窗体的列表中移除。在form1中有一个按钮button1,点击它显示form2。
procedure TForm1.Button1Click(Sender: TObject);
begin
try //不知道有没有必要用异常处理?
form2:=Tform2.Create(application);
form2.ShowModal;
except
form2.Free;
end;
end;
在form2中有一个按钮button2,点击它关闭form2。
procedure TForm2.Button1Click(Sender: TObject);
begin
form2.free;
end;
可是一点击button2就死机。为什么,书上写的是用free来关闭模态窗体的啊。如果改为close就没事,why?free与release有什么区别?form2:=Tform2.Create(application);中的application是什么意思,改为nil行不行?
请各位老师指教,谢谢了!
有两个窗体,form1为主窗体,form2为模态窗体。将form2在自动建立窗体的列表中移除。在form1中有一个按钮button1,点击它显示form2。
procedure TForm1.Button1Click(Sender: TObject);
begin
try //不知道有没有必要用异常处理?
form2:=Tform2.Create(application);
form2.ShowModal;
except
form2.Free;
end;
end;
在form2中有一个按钮button2,点击它关闭form2。
procedure TForm2.Button1Click(Sender: TObject);
begin
form2.free;
end;
可是一点击button2就死机。为什么,书上写的是用free来关闭模态窗体的啊。如果改为close就没事,why?free与release有什么区别?form2:=Tform2.Create(application);中的application是什么意思,改为nil行不行?
请各位老师指教,谢谢了!
解决方案 »
- TADODataSet Filter 多条件过滤问题
- 80分求一段代码(好象我只有80分了)有没有好心人啊!!!!!!!
- 如何定义一个字节类的动态数组?将一个不定大小的文件读取到这个数组里?然后再写入另一个文件?
- 关于电脑合理配置
- 请问字符数组和字符串赋值不兼容吗?
- 特大疑问!用treeview能不能实现www.csdn.net左栏的菜单功能?
- 散分,順便出出主意!
- delphi6无法与sqlserver7.0连接
- SPCOMM中procedure ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
- IdHTTP Get下载网络文件时 经常卡死
- 如何用delphi6.0在outlook中加上一个按钮?小弟很着急!希望高手帮忙!!
- 有关ONKYEDOWN.....
调用Close时,系统会自动将它Free掉,
如果仅仅是关闭Form2,
procedure TForm2.Button1Click(Sender: TObject);
begin
form2.Close;
end;
如果是退出程序
procedure TForm2.Button1Click(Sender: TObject);
begin
form1.Close;
end;现在的书啊,害死人!
记住,书没有CSDN好!!呵呵~~~
Self在Delphi中总是代表实例本类
application代表的是整个运行程序
create()中传递的是AOwner参数,及所有者的意思,也就是这个AOwner负责该
创建对象的释放。[谁建立谁释放原则]也就是说控件的所有者如果调用了Free方法删除自己,那么他所拥有的控件也一样要调用Free方法删除自己
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.ShowModal;
form2.Free;
end;在form2中有一个按钮button2,点击它关闭form2。
procedure TForm2.Button1Click(Sender: TObject);
begin
form2.Close;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
form2:=Tform2.Create(application);
form2.ShowModal;
form2.Free;
end;在form2中有一个按钮button2,点击它关闭form2。
procedure TForm2.Button1Click(Sender: TObject);
begin
form2.Close;
end;
frm1 := TForm1.Create(self);
frm1.ShowModal;
frm1.Free;
2. 没有为什么,Modal窗口都返回了,在Modal窗口该干的都干完了,没用
的东西就扔进垃圾桶啦。
3. 所谓Modal的窗口与普通的窗口区别在于,当一个父窗口有一个Modal的
子窗口时,Modal窗口不关闭,焦点无法回到父窗口,也就是程序会在
ShowModal那句停下来,等Modal窗口关闭以后再往下执行。
非Modal窗口则相反,系统显示非Modal窗口之后立即返回,执行show的
后面一句程序,当然系统焦点也可以回到父窗口啦。
Action:=caFree;再强调一下,也不知这是不是你想要知道的原理:
在Form2.button1Click()中只能用Close(关闭),而不能用Free(释放),就像你可以命令的右手握刀去砍掉你的左手,却不能叫右手拿刀砍掉你的右手。不知上面的比喻是否恰当!!