如何在C++ Builder中创建控件数组?

semitone 2003-11-17 10:12:54
例如,Edit控件。谢谢!!!
...全文
294 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lansb1 2003-11-18
  • 打赏
  • 举报
回复
不知道顶楼说的意思是不是你已经手动在FORM上加了控件,
现在要用程序语句控制它。
如果是这样你可以这样做。
比如说你把五个EDIT加在一个PANEL1上,则实现程序如下:“
for(int i=0;i<5;i++)
{
TEdit *edit=dynamic_cast<TEdit *>(Panel1->Controls[i]);
}
semitone 2003-11-18
  • 打赏
  • 举报
回复
请各位大虾帮个忙。
sczyq 2003-11-18
  • 打赏
  • 举报
回复
强烈建议使用TList, 因为他方便.

TList保存的是地址,所有控件组件都有一个地址.那就是 = new T????(ovwer);
klggg 2003-11-18
  • 打赏
  • 举报
回复
int field_count=10;
TLabel **tmpLabelArray;
tmpLabelArray=new TLabel*[field_count];
for(int i=0;i<field_count;i++)
{
//动态生成Label
tmpLabelArray[i]=new TLabel(this);
tmpLabelArray[i]->Parent=this;
tmpLabelArray[i]->Caption=Form1->DataSource1->DataSet->FieldDefs->Items[i]->Name;
tmpLabelArray[i]->Left=100;
tmpLabelArray[i]->Top=110+i*35;
tmpLabelArray[i]->Visible=true;
}
Jagen在路上 2003-11-18
  • 打赏
  • 举报
回复
那个在C++Bulider中没有支持,你还是用VB吧!我估计你是VB程序员!
semitone 2003-11-18
  • 打赏
  • 举报
回复
我的意思不是用程序来生成控件数组,而是在Form中手动添加控件数组。
yangguo_god 2003-11-17
  • 打赏
  • 举报
回复
TEdit *Edit[20];
for(int i=0; i<20;i++)
{
Edit[i]=new TEdit(this);
Edit[i]->Parent=this;
Edot[i]->Left=i*50;
Edit[i]->Top=10;
}

semitone 2003-11-17
  • 打赏
  • 举报
回复
我是想在程序运行之前,在Form中已经生成了控件数组。请指点。
kw123 2003-11-17
  • 打赏
  • 举报
回复
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下调试通过。
yjy1001 2003-11-17
  • 打赏
  • 举报
回复
输入 有误
Edt->Text = "The num:"+IntToStr(num-1);
应该为
Edt[num-1]->Text = "The num:"+IntToStr(num-1);
yjy1001 2003-11-17
  • 打赏
  • 举报
回复
上面的做法是 动态创建
也可以静态创建,然后使用:
TEdit *Edt[100];
int num=0;
for(int i=0;i<ComponentCount;i++)
{
if(String(Components[i]->ClassName()) == "TEdit")
{
*Edt[num++] = (TButton *)Components[i];
Edt->Text = "The num:"+IntToStr(num-1);
}
}
第1章 制作一个简单的计算器  1.1 基础知识  1.1.1 C++ Builder的集成开发环境   1.1.2 C++ Builder控件的使用方法  1.1.3 有关计算器制作用到控件的介绍  1.2 编程思路  1.3 操作步骤  1.4 创意与超越  1,5 本章小结 第2章 单窗口文本编辑器  2.1 基础知识  2.1.1 TOpenDialog控件和TsaveDialog控件的属性   2.1.2 控件的方法和事件  2.2 编程思路  2.3 操作步骤 2.4 创意与超越 2.5 本章小结 第3章 MDI窗体应用程序 3.1 基础知识 3.1.1 主窗体和子窗体间的通讯 3.1.2 主菜单和子菜单的融合 3.1.3 Dialog控件系列介绍 3.2 编程思路 3.3 操作步骤 3.4 创意与超越 3.5 本章小结 第4章 剪贴板查看器 4.1 基础知识 4.1.1 控件的属性设置 4.1.2 事件处理 4.2 编程思路 4.3 操作步骤 4.4 创意与超越 4.5 本章小结 第5章 我的资源管理器 5.1 基础知识 5.1.1 TreeView控件 5.1.2 ListView控件 5.2 编程思路 5.3 操作步骤 5.4 创意与超越 5.5 本章小结 第6章 系统文件浏览器 6.1 基础知识 6.1.1 注册表和 INI文件简介 6.1.2 TRegistryIniFile的属性和方法 6.2 编程思路 6.3 操作步骤 6.4 创意与超越 6.5 本章小结 第7章 绘制一个简单的图表 7.1 基础知识 7.2 编程思路 7.3 操作步骤 7.4 创意与超越 7.5 本章小结 第8章 图像编辑器 8.1 基础知识 8.2 编程思路 8.3 操作步骤 8.4 创意与超越 8.5 本章小结 第9章 制作一个简单的播放器 9.1 基础知识 9.1.1 AutoEnable属性 9.1.2 Display属性 9.1.3 Fileplayer属性 9.1.4 FileName属性 9.1.5 DeviceType属性 9.1.6 EnabledButton属性 9.2 编程思路 9.3 操作步骤 9.4 创意与超越 9.5 本章小结 第10章 二维图像处理器 10.1 基础知识 10.1.1 OpenGL的工作顺序 10.1.2 程序的基本结构 10.2 编程思路 10.2.1 OpenGL应用程序库 10.2.2 OpenGL对windows系统的扩展库函数 10.2.3 OpenGL辅助函数库 10.3 操作步骤 10.4 创意与超越 10.5 本章小结 第11章 二人对战五子棋 11.1 基础知识 11.1.1 游戏界面设计 11.1.2 游戏所使用的数据结构和算法 11.1.3 TDrawGrid组件的介绍 11.1.4 TTimer组件的使用 11.2 编程思路 11.2.1 TDrawGrid的应用 11.2.2 计时功能 11.3 操作步骤 11.4 创意与超越 11.4.1 数据结构 11.4.2 程序流程 11.5 本章小结 第12章 学生资料管理程序 12.1 基础知识 12.1.1 数据库基本知识 12.1.2 访问数据库的基本途径 12.2 编程思路 12.3 操作步骤 12.4 创意与超越 12.4.1 文数据库的字段名 12.4.2 文输入法的自动切换 12.4.3 对TDBNavigator组件的修改 12.5 本章小节 第13章 高级学生资料管理程序 13.1 基础知识 13.1.1 TQuery组件与TTable的比较 13.1.2 SQL语言简介 13.1.3 TDBChart组件的使用 13.2 编程思路 13.3 操作步骤 13.4 创意与超越 13.5 本章小结 第14章 多媒体数据库的开发 14.1 基础知识 14.1.1 多媒体数据的特点及处理方法 14.1.2 以文件方式保存和播放多媒体数据 14.1.3 以数据方式保存和播放多媒体数据 14.1.4 TOleContainer组件的简单介绍 14.1.5 利用QuickReport组件制作文数据报表 14.2 编程思路 14.3 操作步骤 14.4 创意与超越 14.5 本章小结 第15章 简单的CGI程序 15.1 基础知识 15.1.1 TWebModule控件 15.1.2 TPageProducer、TQueryTableProducer和TDataSetTableProducer控件 15.1.3 超文本标识语言 15.1.4 CGI的工作原理 15.2 编程思路 15.3 操作步骤 15.4 创意与超越 15.5 本章小结 第16章 网页浏览 16.1 基础知识 16.1.1 什么是WWW 16.1.2 什么是URL 16.1.3 打开URL和连接 16.1.4 在页面之间跳转 16.1.5 获得浏览器的状态信息 16.2 编程思路 16.3 操作步骤 16.4 创意与超越 16.5 本章小结 第17章 电子邮件客户端程序 17.1 基础知识 17.1.1 POP3协议 17.1.2 SMTP协议 17.2 编程思路 17.3 操作步骤 17.4 创意与超越 17.5 本章小结 第18章 网上聊天程序 18.1 基础知识 18.1.1 TServerSocket控件的属性、方法和事件 18.1.2 TClientSocket控件的属性、方法和事件 18.1.3 处理异常 18.2 编程思路 18.3 操作步骤 18.4 创意与超越 18.5 本章小结 第19章 FTP客户端 19.1 基础知识 19.2 编程思路 19.3 操作步骤 19.4 创意与超越 19.5 本章小结 附录A C++语法基础 A.1 C++的基本数据类型及常量、变量 A.1.1 常用的基本数据类型 A.1.2 变量的定义 A.1.3 常量的定义 A.2 操作符、表达式及语句 A.2.1 操作符 A.2.2 表达式 A.2.3 语句 A.3 数组 A.3.1 数组的定义 A.3.2 初始化数组 A.3.3 数组元素的访问 A.3.4 二维数组 A.4 指针 A.4.1 指针的定义 A.4.2 指针运算 A.4.3 指针与数组

13,825

社区成员

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

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