导航
  • 主页
  • Windows SDK/API
  • 基础类
  • ActiveX
  • 数据库及相关技术
  • 网络及通讯开发
  • VCL组件使用和开发
  • 问答

请高手帮忙,非模态窗口的实例问题

yuanque 2002-09-26 05:22:56
c++builder开发者指南里有这么一句:
只要窗体仍在使用,就必须保证非模态窗体的引用变量的存在,也就是说这此变量必须有全局范围,
大多数情况下,必须使用窗体创建时生成的全局变量(变量名和窗体的N a m e属性相同),如果应用程序需要窗体的额外的实例,必须为每个实例声明单独的全局变量。

但我想从一个窗口类生成多个实例,而且想非模态显示,怎么办?
...全文
44 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yuanque 2002-09-27
要是还有好方法的放更好,最好是用户关闭时这个窗口就释放了:)
回复
yuanque 2002-09-27
TO ThinkX() ,
感激不尽,正想这样做
回复
yangl2000 2002-09-26
楼上的是高手。
回复
ThinkX 2002-09-26
定义一个全局的TList来保存所有的Form指针就可以了,
或者用Form中的static来保存也可以,释放form也很容易的。
class TMyForm: public TForm {
...
}

class TFormManager {
public:
TFormManger() {
formList = new TList();
}

virtual ~TFormManager() {
for (int i = 0; i < formList->Count; i++) {
TForm* form = dynamic_cast<TMyForm*>(formList->Items[i]);
if (form != NULL) {
delete form;
formList->Items[i] = NULL;
}
}

formList->Clear();
delete formList;
formList = NULL;
}

TMyForm* CreateForm(TForm* parent) {
TMyForm* form = new TMyForm(parent);
formList->Add(form);
return form;
}

private:
TList* formList;
}
回复
yuanque 2002-09-26
关键是局部变量如果用delete就显示不出来
回复
nhconch 2002-09-26
你理解错了,“必须保证非模态窗体的引用变量的存在”的为保证窗体的清除,以免赞成内存不能回收,不是说非得定义成全局变量。
如果窗体是通过代码(动态)生成,你必须保证在代码中把它delete。如果静态就由BCB去清除。
回复
yuanque 2002-09-26
关键是实例个数不确定,是由用户生成的。
如果是按一般的类来使用的话,我觉得就不一定要定义全局变量
回复
gangAndgang 2002-09-26
你就把TFORM 当成一般的类来使用就行了,申明几个全局变量,创建实例,使用之后再删除(对所有的VCL组件,系统都可以自行删除),比如:
TForm1 Form1 = new TForm(this);
TForm1 Form2 = new TForm(this);
TForm1 Form3 = new TForm(this);
Form1->Show();//非摸太
Form2->Show();
Form3->Show();

回复
myy 2002-09-26
在cpp上面的:
TForm1 Form1;
TForm1 Form11;
TForm1 Form12
在.h下面
extern PACKAGE Form1;
extern PACKAGE Form11;
extern PACKAGE Form12;
回复
发动态
发帖子
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
社区公告
暂无公告