社区
C++ Builder
帖子详情
请问如何创建一个组控件,然后又可以动态调用?请进!:)
Sammo
2003-03-08 08:08:19
请问如何创建一个组控件,然后又可以动态调用?
比如说,
int i=10;
现在,在程序运行期间,动态创建i(10)个TPanel控件,然后设置其属性等!
我还没有试过如此使用!请赐教!谢谢!:)
...全文
112
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
控件
本文介绍了在MFC项目中如何
动态
创建CEdit
控件
,特别是针对用户数量不确定的情况。通过CStatic类的Create()函数实现
控件
的
动态
创建,并在退出时使用CPtrArray管理
动态
控件
,避免内存泄漏。然而,在创建和删除
控件
的过程中,直接使用delete会导致
控件
无法显示。解决方案是只需删除CPtrArray链表中的
控件
指针,因为链表中的指针是引用,删除链表中的指针即可释放内存,而不会影响已创建的
控件
显示。
MFC中
动态
创建
控件
本文详细阐述了如何在MFC中
动态
创建包括按钮、单选按钮等
控件
,并添加相应事件处理,主要步骤涉及在对话框中设置
控件
ID和属性,以实现
控件
在显示时的
动态
生成。
MFC
动态
创建
控件
这篇博客介绍了如何在MFC中
动态
创建
控件
,包括在资源中设定
控件
ID和Caption,以及如何手动添加
动态
控件
的响应函数,以实现按钮的单击事件。在消息映射、函数定义和响应函数编写完成后,还强调了在
控件
不再使用时需要回收资源,通过delete关键字释放
动态
创建的
控件
对象。
【wpf】05 几种容器
动态
创建
控件
的对比
本文记录了WPF中常用容器
动态
创建
控件
的学习测试过程。介绍了StackPanel、Grid等七种容器的布局特点、
动态
添加
控件
方法及适用场景,还进行了编码对比,探讨了容器切换效果的实现方法。最后总结得出,不固定数量
控件
生成用ScrollViewer和其他容器
组
合效果较好。
VB中
动态
创建
控件
本文介绍了在VB中
动态
创建
控件
以实现数据驱动窗体的方法。包括使用Add方法创建
控件
、解决授权问题、处理不同类型字段生成
控件
的问题,还阐述了捕获多个
控件
事件的方法,以及
动态
添加
控件
的参数说明和运行时添加未引用
控件
的要点。
C++ Builder
13,874
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章