社区
C++ Builder
帖子详情
关于动态产生Form的问题
ukyozhou
2001-11-02 11:54:14
动态产生一Form,到底用show()还是showmodal()?
如果用showmodal(),则产生的Form永远位于最上层并一直是当前窗口。
如果用show(),则show()之后不可立即写delete Form。但在产生的Form的close时写action=caFree;我不知道是否把此Form完全销毁,会不会造成内存丢失???
...全文
181
9
打赏
收藏
关于动态产生Form的问题
动态产生一Form,到底用show()还是showmodal()? 如果用showmodal(),则产生的Form永远位于最上层并一直是当前窗口。 如果用show(),则show()之后不可立即写delete Form。但在产生的Form的close时写action=caFree;我不知道是否把此Form完全销毁,会不会造成内存丢失???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
doudou536
2001-11-24
打赏
举报
回复
本来还想回答的,大家都说的这么好!我也进步了。
gxgxfish0813
2001-11-24
打赏
举报
回复
不会不会的,因为空间放了
ggyy
2001-11-24
打赏
举报
回复
TForm应用技巧
一、让窗口总是在最前面
Form 的FormStyle属性设置为fsStayOnTop值。
二、动态调用窗体Form
在缺省情况下,由File/New Form生成添加入项目文件中的窗体都具有"Auto Create"(自动创建)的特性。即只要程序运行,该窗体就存在于内存中了,不管当前它是否被调用。具有这种特性的窗体一般适用于窗体属性比较固定、经常被调用的情况。其优点是速度快,缺点是占用内存。在实际程序设计中,会遇见大量类似对话框功能的窗体,它们用于显示状态或输入信息,仅须在程序中调用一下,完成其功能就行了,无需常驻内存。这时可以通过选择Project/Options/Forms,将"Auto--Create forms "栏中相应的窗体,如Form1,用" >"键移动到"Available forms"栏中,并在程序需调用该窗体处,加入下列语句:
TForm1 *myform=new TForm1(this);
myform- >ShowModal();
delete myform;
窗体Form1仅是在需要调用时才调入内存,调用完成后,即用delete清除出内存。这样可减少程序对内存资源的占用。
三、遍历窗体控件的方法
要访问或修改窗体上的控件,方法很简单,以TEdit为例子:
Edit1- >Text="";
Edit2- >Text="";
但如果窗体上有十来个像Edit1这样的控件,需要进行相同的初始化,用上面的方法一个一个地进行,岂不麻烦!所以有必要掌握遍历窗体控件的方法。在介绍该方法之前,让我们先了解一下窗体Form的Components和Controls 属性。参见表一。
表一
属性 类型 说明
ComponentCount Int 目前Form上各类控件的总数
Components TCompont* 目前Form上指向所有控件的数组
ControlCount Int 目前Form上某一子区域上各类控件的总数
Controls TControl* 目前Form上指向某一子区域上所有控件的数组
以图一为例(图略)说明,Form1 的ComponentCount=6,而Panel1的ControlCount=4.,
其中:
数组 对象
Components[0] Panel1
Components[1] Label1
Components[2] Edit1
Components[3] Label2
Components[4] Edit2
Components[5] Button1
数组 对象
Controls[0] Label1
Controls[1] Edit1
Controls[2] Label2
Controls[3] Edit2
下面这段代码完成了对Panel1上所有TEdit控件的遍历初始化。读者稍加修改,即可对其它控件进行遍历。这里有一个小技巧,我们把需要进行初始化的控件放置在了一Panel1上,与不需要初始化的控件区分开来,这样便于编程。
AnsiString namestring="TEdit";
for(int i=1;i< Panel1- > ControlCount;i++)
{
if(Panel1- > Controls[i]- > ClassNameIs(namestring))
{
TEdit *p=dynamic_cast < TEdit* > (Panel1- >Controls[i]);
P- >Text="";
}
}
四、不规则窗口
1.在窗口定义中,加入HRGN hWndRgn;
2.在TForm::OnCreate()消息函数最后,加入下面的代码:
hWndRgn=::CreateEllipticRgn(0,0,Width,Height);
::SetWindowRgn(hWndRgn,TRUE);
3.设置TForm的属性为无标题,无边框。
4.编译连接应用程序,就可以看到一个椭圆形窗口。
五、MDI Form
1.Application->CreateForm(__classid(Tjjcginput),
&jjcginput);
后不用在使用显示Form的语句就可以显示出来了。
2.form的onclose事件必须用下面语句释放空间:
void
__fastcall TMDIChild::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
hugsnow
2001-11-24
打赏
举报
回复
VCL组件(动态生成的窗体也属于)不用手动删除,由它的所有者删除,比如TForm *form2=new TForm(this);
那么就由 this这个窗体来负责销毁 form2
我记得好像是这样的,不过这有点不符合C语言的习惯
但是比如 TStringList *l=new TStringList();这样初始化的VCL组件没有所有者,就必须自己用delete删除
mengxianbao1521
2001-11-24
打赏
举报
回复
不会的 因为你的动态form 在创立的同时 已经有了释放空件的语句。
delete Form
mengxianbao1521
2001-11-02
打赏
举报
回复
TForm2*form2=new form2(Application/this);//申请空间.
Form2=ShowModel();
delete Form2;//释放掉空间.
这个代码在form1中写,在form1中建立动态form ,
在连接form2.这样动态的form2就建立好了.
lynu
2001-11-02
打赏
举报
回复
ShowModal()是有模式窗体,打开后必须关闭才能返回.
不管Show,ShowModal(),只是这个窗体在delete之前还存在,都是可以delete form的.在OnClose()中加上Action=caFree,那么窗体关闭时就会自动释放.释放后再用delete会出错的.
01101230
2001-11-02
打赏
举报
回复
要delete Form必须先调用close()函数吧
01101230
2001-11-02
打赏
举报
回复
show()只是把此窗口带到最前端位置,而不是动态产生窗口
showmodal()是模态窗口的意思
action=caFree是用来销毁动态产生的窗口并释放内存的
Google Android SDK开发范例大全(PDF高清完整版3)(4-3)
3.19 全屏幕以按钮覆盖——
动态
产生
按钮并最大化 3.20 今晚到哪儿打牙祭?——具选择功能的对话框 3.21 Android变脸——主题(Theme)实现 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞——...
Google Android SDK开发范例大全(PDF完整版4)(4-4)
3.19 全屏幕以按钮覆盖——
动态
产生
按钮并最大化 3.20 今晚到哪儿打牙祭?——具选择功能的对话框 3.21 Android变脸——主题(Theme)实现 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞——...
Google Android SDK开发范例大全(PDF高清完整版1)(4-1)
3.19 全屏幕以按钮覆盖——
动态
产生
按钮并最大化 3.20 今晚到哪儿打牙祭?——具选择功能的对话框 3.21 Android变脸——主题(Theme)实现 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞——...
vue+element创建
动态
的
form
表单.以及
动态
生成表格的行和列
动态
创建
form
表单,网上有插件 (
form
-create) 不过我不知道它怎么用,没有使用成功,如果你使用成功了,欢迎下方留言. 最后我使用了笨方法,针对各个表单写好通用的组件,然后根据type用v-if来渲染对应的表单,数据,...
Form
表单——
动态
增加、减少表单项的运用
文章目录一、代码示例二、相关
问题
2.1 编辑时如何复现
动态
项数据2.2 渲染
问题
官方参考地址 业务场景:添加问卷
问题
,一共两类,选择题或简答题 一、代码示例 <template> <a-
form
:label-col="{ span: 5 ...
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章