社区
Delphi
帖子详情
动态创建窗口form2,与工程中创建窗口form2,用到的时候visible才设成true,都可实现功能,但有何区别?哪种方法好?
plum5
2008-10-22 12:39:30
在form1中动态创建窗口form2,与工程中创建窗口form2,用到的时候visible才设成true,都可实现功能,但有何区别?哪种方法好?
...全文
104
13
打赏
收藏
动态创建窗口form2,与工程中创建窗口form2,用到的时候visible才设成true,都可实现功能,但有何区别?哪种方法好?
在form1中动态创建窗口form2,与工程中创建窗口form2,用到的时候visible才设成true,都可实现功能,但有何区别?哪种方法好?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fangsp
2008-10-22
打赏
举报
回复
动态创建是使用的时候才开辟内存空间,用完就释放,工程中创建是静态的,也就是程序一运行就加载了该对象。该对象一直存在直到程序结束。
如果你的体统比较大 建议多用动态创建
如果你的系统不是很大 对性能也没有什么特别的要求用静态的就行了 这样实现起来也比较方便
话又说回来 现在机器的配置已经非常棒了 动态创建也没有什么必要了
aluyue
2008-10-22
打赏
举报
回复
楼上正解,
正如 窗体Close,其实只是隐藏起来,而并没有真正释放一样,直到主程序结束。
工程中创建 如果窗体比较多,那程序启动就变的很慢了。。。
天行归来
2008-10-22
打赏
举报
回复
动态创建是使用的时候才开辟内存空间,用完就释放,工程中创建是静态的,也就是程序一运行就加载了该对象。该对象一直存在直到程序结束。
plum5
2008-10-22
打赏
举报
回复
[Quote=引用 11 楼 lynmison 的回复:]
以上代码可是致命错误,FormX由主窗体创建,你在FormX里就把主程序关闭,返回到主程序时,必然引发地址访问异常。
[/Quote]
我现在就是在FormX中用halt把程序关闭的,没有引发异常,程序可以很好的工作,但我担心这样结束程序不能释放内存
如果这方法不行,是不是在创建窗口中不能结束主程序?只有在工程中创建窗口中才能结束主程序?
genispan
2008-10-22
打赏
举报
回复
lynmison 向你学习
天行归来
2008-10-22
打赏
举报
回复
[Quote=引用 10 楼 plum5 的回复:]
我用的这种方式
主窗口:
try
fmXXX := TFormX.Create(self);
fmXXX.ShowModal;
finally
fmXXX.Free;
end;
edit1.text := xx;
.....
创建窗口fmXXX:
procedure TFormX.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Application.MainForm.Close; //创建窗口关闭,回到主窗口执行edit1.text := xx;
Application.Terminate; //创建窗口关闭,回到主窗口执行edit1.text := xx;
halt; …
[/Quote]
以上代码可是致命错误,FormX由主窗体创建,你在FormX里就把主程序关闭,返回到主程序时,必然引发地址访问异常。
plum5
2008-10-22
打赏
举报
回复
我用的这种方式
主窗口:
try
fmXXX := TFormX.Create(self);
fmXXX.ShowModal;
finally
fmXXX.Free;
end;
edit1.text := xx;
.....
创建窗口fmXXX:
procedure TFormX.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Application.MainForm.Close; //创建窗口关闭,回到主窗口执行edit1.text := xx;
Application.Terminate; //创建窗口关闭,回到主窗口执行edit1.text := xx;
halt; //整个程序结束
end;
天行归来
2008-10-22
打赏
举报
回复
模态窗口:
fmXXX := TFormX.Create(self);
fmXXX.ShowModal;
fmXXX.Free;
---------------------------------------------------------------
非模态:
if fmXXX<>nil then fmXXX := TFormX.Create(self);
fmXXX.Show;
//在非模态方式下,以下是必须
procedure TFormX.FormClose(Sender: TObject; var Action: TCloseAction);
begin
fmXXX := nil;
Action := caFree;
end;
应用程序关闭,就直接在主窗口 Close 就可以了。
plum5
2008-10-22
打赏
举报
回复
[Quote=引用 6 楼 suiyunonghen 的回复:]
Halt;
Application.MainForm.Close;
Application.Terminate
这三种方法都可以
[/Quote]
这三种方法我都试过了
只有halt;可以结束程序,但是不知这样结束程序,动态创建窗口form2的内存释放了没有?
Application.MainForm.Close;
Application.Terminate 都不行,会接着往下执行
zhao_yong
2008-10-22
打赏
举报
回复
[Quote=引用 5 楼 plum5 的回复:]
哦,谢谢楼上几位,这个我明白了
再问个问题:
工程中创建窗口用close可结束程序
在动态创建窗口中用close只能回到调用窗口,怎样结束程序呢?
[/Quote]
你所說的結束如果是結束整個程序進程就如樓上說的,如果只是想結束動態創建的窗口也只要close就可以了!
不得闲
2008-10-22
打赏
举报
回复
Halt;
Application.MainForm.Close;
Application.Terminate
这三种方法都可以
plum5
2008-10-22
打赏
举报
回复
哦,谢谢楼上几位,这个我明白了
再问个问题:
工程中创建窗口用close可结束程序
在动态创建窗口中用close只能回到调用窗口,怎样结束程序呢?
不得闲
2008-10-22
打赏
举报
回复
楼上都说的很清楚,动态创建是使用的时候才创建!用完释放,如果都放在工程文件中加载的话
如果窗体复杂,加载的窗体多!那么程序很可能要过很长时间才会显示出来
C#程序调用
Form
.Show报“
创建
窗口
句柄出错”
1、发现问题程序主
窗口
(称为A)是一个Mdi
窗口
,先打开一个子
窗口
B,将其最大化,然后再从子
窗口
B
中
打开一个子
窗口
C,C的父
窗口
是A,将C最大化,然后调用C.Show()。这时候报错,错误信息为:
创建
窗口
句柄时出错。将...
.Net
中
控件
Visible
属性设置为
true
失效,并不显示出来的问题
问题:在设计界面的过程
中
,在主线程设置按钮和label控件的
visible
属性时无效的问题,论坛上看到有人说把控件删了重新添加,实验后无效。 问题根源:添加控件后,对其进行如下操作:在
form
设计页,点击选择控件后,...
C#
Form
1与
Form
2窗体间频繁切换的处理
Form
2 frm2 = new
Form
2(); this.Hide(); frm2.Show(); 由
Form
2切换到
Form
1
Form
1 frm1 = new
Form
1(); this.Hide(); frm1.Show(); 问题 如果频繁切换而每次都new进行实例化,产生的内存垃圾不好处理,...
C#
中
Form
窗口
中
的控件不显示
C#
中
Form
窗口
中
的控件不显示 转自http://www.debugease.com/csharp/1710.html 先前在C#
中
设计的
Form
界面,后来再打开时界面
中
的控件都不显示了,运行时跟设计时都不显示,哪位高手指点一下,谢谢 ...
C# 在一个From窗体
中
调用另一个窗体
中
的控件
本文主要介绍如何
实现
在一个窗体
中
...1、在
Form
1窗体
中
实现
Form
2窗体对象
form
2,并设置
form
2对象的Owner为
Form
1。
Form
2
form
2 = new
Form
2();
form
2.Owner = this; 2、在
Form
2
中
实现
Form
1的窗体对象,调用chec...
Delphi
5,386
社区成员
262,729
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章