如何操作动态创建的控件

choge 2010-12-19 07:40:58
Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
ALM Alarm;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Alarm.Close();
}


Unit2.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------

#pragma package(smart_init)
ALM::ALM()
{
TForm *Form1 = new TForm((void*)(0));
Form1->BorderIcons<<biMaximize<<biMinimize<<biSystemMenu;
Form1->BorderStyle=bsDialog;
Form1->Width=400;
Form1->Height=300;
Form1->Show();
//AlmForm->ShowModal();
//delete Form1;
}
ALM::Close()
{
Form1->Close();
}


Unit2.h
//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
class ALM
{
public:
ALM();
Close();
private:
TForm *Form1;
};
#endif

//---------------------------------------------------------------------------

新建一个工程,放一个按钮Button1。
新建一个Unit2,定义一个类ALM,初始化ALM时动态创建一个窗体。
要求点Button1时,关闭动态创建的窗体。
实测窗体已创建,关闭时出错,请高手帮忙分析
...全文
73 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2010-12-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 choge 的回复:]
感谢2位的回复。
用CppFile的方法获得成功
用ccrun的方法出现如下错误,不知何故
[C++ Error] Unit2.cpp(12): E2015 Ambiguity between '_fastcall Forms::TForm::TForm(Classes::TComponent *)' and '_fastcall Forms::TForm::TForm(void *)'
……
[/Quote]

改成:
Form1 = new TForm((void *)NULL);
luo_riser 2010-12-20
  • 打赏
  • 举报
回复
直接用Form1 = new TForm(this);
choge 2010-12-20
  • 打赏
  • 举报
回复
感谢2位的回复。
用CppFile的方法获得成功
用ccrun的方法出现如下错误,不知何故
[C++ Error] Unit2.cpp(12): E2015 Ambiguity between '_fastcall Forms::TForm::TForm(Classes::TComponent *)' and '_fastcall Forms::TForm::TForm(void *)'
ccrun.com 2010-12-20
  • 打赏
  • 举报
回复
你的ALM类中已经声明了私有的Form对象指针,在ALM的构造函数中,创建一个Form对象并将指针赋给他就行了,调用Close的时候再释放该Form.

但是在ALM构造函数中,你将创建的Form对象指针赋给了另外一个对象指针(虽然也叫Form1),但这个指针是局部,和ALM类的私有Form对象指针是两回事.也就说是,其实ALM类的私有对象指针没有被初始化,所以关闭时会报AV错.

TForm *Form1 = new TForm((void*)(0));
改成:
Form1 = new TForm(NULL);
即可.
CppFile 2010-12-19
  • 打赏
  • 举报
回复
TForm *Form1 = new TForm((void*)(0));
改为
Form1 = new TForm((void*)(0));

13,825

社区成员

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

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