首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

问个关于new的有关问题

2012-03-02 
问个关于new的问题void__fastcallTMainForm::CreateMDIChild(StringName){TMDIChild*Child//---createane

问个关于new的问题
void   __fastcall   TMainForm::CreateMDIChild(String   Name)
{
TMDIChild   *Child;

//---   create   a   new   MDI   child   window   ----
Child   =   new   TMDIChild(Application);
Child-> Caption   =   Name;
if   (FileExists   (Name))
Child-> Memo1-> Lines-> LoadFromFile(Name);
}
//---------------------------------------

void   __fastcall   TMainForm::FileNew1Execute(TObject   *Sender)
{
CreateMDIChild( "NONAME "   +   IntToStr(MDIChildCount   +   1));
}
//---------------------------------------

void   __fastcall   TMainForm::FileOpen1Execute(TObject   *Sender)
{
if   (OpenDialog-> Execute())
CreateMDIChild(OpenDialog-> FileName);
}
//----------------------------------------------------

比如我new   了5mdichild。。。。我怎么获得这5个mdichild的指针阿?



[解决办法]
第1个问题:
TMDIChild *p = (TMDIChild *)FindComponent( "NONAME2 ");
if(p)
{
//... p就是Noname2子窗体的指针
}

第2个问题:
每一个pts[i]都是一个TsuiTabSheet *,在代码中生成了新的TsuiTabSheet实例并且指定了Owner(Form),那么除非主动释放了pts[i](比如用delete pts[i]),或者其Owner(Form)进行了释放,其占用的资源是一直存在的(包括TsuiTabSheet的Name,所以会提示名称已经存在)。
举一个最简单的例子,在某个按钮的点击事件中添加以下代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TButton *btn = new TButton(this);
btn-> Parent = this;
btn-> Name = "Btn1 ";
btn-> Show();
}

以上代码生成一个新的按钮在窗体上,并且按钮的名字为Btn1,其Owern是this(也就是Form),那么除非delete btn或者由关闭这个窗体(这时Owner会负责释放Btn1的资源),否则其占用的资源是一直存在的。当第二次点击Button1时,执行到btn-> Name这一行代码时,将提示Btn1组件已经存在。当然,你可以不指定btn的Name,这样就不会报名称已存在的提示。

热点排行