怎样在一个Panel中切换显示多个Frame,急!

电脑爆 2007-02-03 01:36:42
有一个主Form和若干个Frame, 如Frame1、Frame2、Frame3、Frame4……
我想在Form中通过多个按钮在一个Panel中切换显示各个Frame
请高手指教,请说详细点,在线等,谢谢!

我现在对各个按钮使用的是如下代码:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Frameup=NULL;
Frameup=new TFrame1(this);
Frameup->Parent=Panel1;
Frameup->Align=alClient;
}

不过在点击同一个铵钮两次后就提示出错,如:
a component named Frame2 already exists
...全文
374 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
CACACACACA 2007-02-12
  • 打赏
  • 举报
回复
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(Frameup)
Frameup->Free();

//Frameup=NULL;
Frameup=new TFrame2(this);
Frameup->Name ="MyFrameup" + AnsiString(FrameupCd++);
Frameup->Parent=Panel1;
Frameup->Align=alClient;
}

如果显示没问题, 那就是没问题了.

结贴吧.
hongwuzhao 2007-02-05
  • 打赏
  • 举报
回复
不太明白你的意思。
你每次生成的都是TFrame2的实例,现在又在生成前销毁,故不需要动态生成那么多,仅使用一个实例对Frame上的数据进行处理即可。
laowang2 2007-02-04
  • 打赏
  • 举报
回复
up
电脑爆 2007-02-03
  • 打赏
  • 举报
回复
呵呵,刚刚改了一下,在前面加一个释放对象的语句,好像就没占用内存了.不知是不是这样的:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(Frameup)
Frameup->Free();

//Frameup=NULL;
Frameup=new TFrame2(this);
Frameup->Name ="MyFrameup" + AnsiString(FrameupCd++);
Frameup->Parent=Panel1;
Frameup->Align=alClient;
}
电脑爆 2007-02-03
  • 打赏
  • 举报
回复
刚刚测试了一下上面的方法,随着我的不断切换,内存使用量也在不量的增加.要到结束程序后才能释放Frame所占内存.
电脑爆 2007-02-03
  • 打赏
  • 举报
回复
hongwuzhao(新手——胡子一大把),你好,
因为我的项目里面Frame太多了,七八十个,所以如果每切换一次就用一个新名称会不会造成内存的大量浪费?
如果这种方法没有释放内存的话,能不能给一种在切换另一个Frame的时候先释放前一个Frame呢?
谢谢!
hongwuzhao 2007-02-03
  • 打赏
  • 举报
回复
两种方法:
一、使用PageControl,设置每个TabSheet 的TabVisible = false

二、

void __fastcall TForm1::Button1Click(TObject *Sender)
{
static int FrameupCd= 10;
Frameup=NULL;
Frameup=new TFrame1(this);
Frameup->Name = "MyFrameup" + AnsiString(FrameupCd++);
Frameup->Parent=Panel1;
Frameup->Align=alClient;
}

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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