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

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

但我想从一个窗口类生成多个实例,而且想非模态显示,怎么办?
...全文
73 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
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;

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧