社区
C++ Builder
帖子详情
请问如何创建一个组控件,然后又可以动态调用?请进!:)
Sammo
2003-03-08 08:08:19
请问如何创建一个组控件,然后又可以动态调用?
比如说,
int i=10;
现在,在程序运行期间,动态创建i(10)个TPanel控件,然后设置其属性等!
我还没有试过如此使用!请赐教!谢谢!:)
...全文
126
5
打赏
收藏
请问如何创建一个组控件,然后又可以动态调用?请进!:)
请问如何创建一个组控件,然后又可以动态调用? 比如说, int i=10; 现在,在程序运行期间,动态创建i(10)个TPanel控件,然后设置其属性等! 我还没有试过如此使用!请赐教!谢谢!:)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
李志林HZ
2003-03-08
打赏
举报
回复
C++Builder中实现控件数组的功能
Borland C++ Builder作为Inprise(原Borland)公司新推出的快速应用程序开发工具(RAD),具有威力强大的C++语言和快捷便利的可视化编程完美结合的优点,遗憾的是其没有直接提供像VB中的控件数组的功能,需要开发者自己编程实现。
VB中的一个控件数组可以1、允许多个控件共享同一个事件句柄,2、提供了运行期间增加一个控件的机制,3、提供了一种方便的组合控件的方法。前两项在C++ Builder中早已实现,而且CB更有一个优点。即不同类型的控件可以使用相同的句柄(只需在相关控件的Object Inspector窗口中的EVENT事件设置即可)。
C++ Builder中使用了Tlist类对象来组合控件数组,与VB控件数组元素必须为同一类型控件相比较,C++ Builder中的Tlist类对象可以组合任意类型的控件而不必强求同一种类,这样就大大地方便了程序开发者。例如可以把在不同Panel面板控件上的所有控件组合为一个控件数组。
作者在开发实时监控程序时,应用Tlist类对象创建、维护了多类型的控件数组。其实现原理与方法详见以下的原程序代码。实例程序实现了动态创建一个包含8个TEdit类型控件和4个TImage类型控件的控件数组,在程序运行中对所创建的控件进行修改、维护的功能(简单起见,只对TImage控件的Parent属性进行了修改,对控件数组中各个控件的属性修改及事件处理句柄均可依此方法修改)。
1、创建一个新的工程文件(New Application),在Form1上放置两个TPanel类型的Panel1和Panel2,调整大小合适,再在窗体下方放置四个TButton类型Button1,Button2,Button3,Button4,设置控件属性如下:Button1->Caption=“新建控件数组”,Button2->Caption=“改变控件位置”, Button3->Caption=“还原到原位置”, Button4->Caption=“退出”;Button2->Enabled=false,Button3->Enabled=false。
(注:以下黑体字部分为需要手工添加的代码)
2、在文件Unit1.H中加入以下声明:
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1;
TPanel *Panel2;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TButton *Button4;
private: // User declarations
TList *MyVCL;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
virtual __fastcall ~TForm1( );
};
3、切换到工程的Form界面,双击工程的主界面Form,创建一个OnCreate事件句柄,在文件Unit1.CPP中加入以下代码:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
MyVCL = new TList;//创建TList对象
}
将TForm1析构函数加入到文件Unit1.CPP中:
__fastcall TForm1::~TForm1()
{
delete MyVCL; //删除TList对象
}
4、双击标签(Caption)为“创建控件数组”的按钮,创建一个OnClick事件句柄,添加以下代码到OnClick事件句柄中:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//创建新的控件,调整其位置,并加入到MyVcl(TList 类)之中
int temptop=5;
for (int i=0;i<4;i++) {
TEdit *EditNow = new TEdit(this);
EditNow->Parent=Panel1;
EditNow->Text= IntToStr(i);
EditNow->ReadOnly=true;
EditNow->Top=temptop;
EditNow->Height=24;
EditNow->Width=24;
EditNow->Left=10;
MyVCL->Add(EditNow); //加入到控件数组中
TImage *ImageOff= new TImage(this);
ImageOff->Parent=Panel1;
ImageOff->Picture->LoadFromFile(“None.BMP”);
ImageOff->Top=temptop;
ImageOff->Height=24;
ImageOff->Width=24;
ImageOff->Left=EditNow->Left+EditNow->Width;
MyVCL->Add(ImageOff); //加入到控件数组中
TEdit *EditStatus = new TEdit(this);
EditStatus->Parent=Panel1;
EditStatus->Font->Name = “Arial”;
EditStatus->Font->Size = 12;
EditStatus->Text=“禁止访问”;
EditStatus->ReadOnly=true;
EditStatus->Top=temptop;
EditStatus->Height=24;
EditStatus->Width=80;
EditStatus->Left= ImageOff->Left+ImageOff->Width;
MyVCL->Add(EditStatus); //加入到控件数组中
temptop=temptop+24+5;
}
Button1->Enabled=false;
Button2->Enabled=true;
}
5、同4所示方法,依次双击标签的标题(Caption)为“改变控件位置”、 “还原到原位置”、 “退出”的按钮,创建对应的OnClick事件句柄,添加以下代码到对应的OnClick事件句柄中:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
for (int i=0;i<4;i++)
((TImage*)MyVCL->Items[i*3+1])->Parent=Panel2;
Button2->Enabled=false;
Button3->Enabled=true;
}
void __fastcall TForm1::Button3Click(TObject *Sender)
{
for (int i=0;i<4;i++)
((TImage*)MyVCL->Items[i*3+1])->Parent=Panel1;
Button3->Enabled=false;
Button2->Enabled=true;
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Close(); //关闭窗体
}
由上所述,实际的代码大多只是用于设定控件位置和基本属性,真正实现控件数组功能的代码并不太多,也不复杂,而且十分的灵活;需要注意的是使用TList类对象组合中的各项控件之前,必须先将其强制转换为一个对象指针以指明其类型,才能对其属性进行修改/赋值操作。
本文程序在C++ Builder 3.0/ PWin95,C++ Builder 4.0/ PWin98下调试通过。
[CB技巧集][返回首页]
--------------------------------------------------------------------------------
这里摘录的文章版权归原作者所有
Cola 摘录 2000.1.26
santwy
2003-03-08
打赏
举报
回复
for(int i=1;i<=10;i++)
{
TPanel*Panel=new TPanel;
Panel->width=50;
Panel->height=25;
Panel->parant=this;
Panel->Name= "P" + IntToStr(i);
.
.
.
}
Sammo
2003-03-08
打赏
举报
回复
我要创建的是一组,而不是一个!:)谢谢!:)一个我会!但一组就是不知道怎么创建!:)
bluebear88
2003-03-08
打赏
举报
回复
TPanel*Panel=new TPanel;
Panel->width=50;
Panel->height=25;
Panel->parant=this;
wangxiangsjz
2003-03-08
打赏
举报
回复
用TList。
MFC
动态
创建CEdit
控件
在项目开发时,可能遇到
动态
创建
控件
的情况。如根据当前用户的数量,
动态
创建
控件
显示用户信息等情况,需要
动态
常见静态文本框和编辑框等。 此时,利用
控件
类中Create()函数进行
动态
创建,默认是显示状态。如: 头文件定义:CStatic *p_MyStatic; CPP中实现: p_MyStatic = new CStatic(); p_MyStatic->Create("静态文本框
MFC中
动态
创建
控件
本篇文章介绍了在MFC中怎么
动态
创建各种
控件
,以及添加相应的响应事件。 放置静态
控件
时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从对象窗口中拖出所需
控件
放在对话框中即可,再恰当批改
控件
ID,设置
控件
属性,一个静态
控件
就创建好了,当对话框被显示时,其上的
控件
也会显示。 静态
控件
不须要
调用
Create()函数来创建。
动态
控件
是指在须要时由Create()创建的
控件
,这与
MFC
动态
创建
控件
动态
控件
是指在需要时由Create()创建的
控件
,这与预先在对话框中放置的
控件
是不同的。 一、创建
动态
控件
: 1.建立
控件
ID号: ID号是
控件
的标识,创建
控件
前必须先为它设置一个ID号。 打开资源中的“String Table”,在空白行上双击鼠标,这时会弹出一个ID属性对话框,在其中的ID编辑框中输入ID,如:IDC_MYBUTTON,在Caption中输入
【wpf】05 几种容器
动态
创建
控件
的对比
从上面代码实现的效果来看,对于
动态
生成的
控件
可以分成两种可能性:一是固定数量和种类的
控件
生成;二是不固定数量和种类的
控件
生成。从上面的实现效果可以明显看出,不固定数量的
控件
生成很容易超出容器范围,从而无法看到,那这里能够胜任此功能的只有使用ScrollViewer和其他容器的
组
合实现,效果是比较好的。如下:wpf中
控件
的灵活
组
合,还有很多值得深入学习的地方,在使用的过程中,逐渐进步。
VB中
动态
创建
控件
创建数据驱动窗体所谓数据驱动窗体就是根据所请求的数据的不同生成相应的窗体。举例来讲,假设你现在有一个数据库,其中有些字段必须根据登录者的身份加以显示,授权级别高的用户可以浏览并修改这些字段的内容;授权级别一般的用户只能浏览这些字段中的数据;授权级别低的用户则不能浏览这些字段中的内容。要做到这一点就得利用VB
动态
添加
控件
的功能。
动态
创建
控件
无论你想要创建何种类型的数据驱动窗体,你必须知道如何在运行时
C++ Builder
13,872
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章