【发布时间】:2012-09-07 21:56:53
【问题描述】:
具体问题
如何在 Borland C++ Builder 上创建一组按钮并使用它?
我正在使用 Borland C++ Builder 6 和 Borland Developer Studio 2006 (Turbo C++ 2006)。
目的
仅使用带有索引的 for 循环来处理表单上的大量按钮,例如,更改它们的标题、大小和位置。
我知道我是否有一个名为Button1 的按钮,如果我创建另一个按钮(通过TButton *Button2 = new TButton(Form1))在该按钮的点击事件中,我可以将Button1 分配给Button2(Button2 = Button1)和他们我可以简单地用Button2->Caption修改Button1的标题。所以我想扩展它,将真实组件的指针分配给数组的元素,让它们通过for 循环与所有这些元素一起工作。
好吧,如果有人找到一种方法将所有按钮作为数组添加到表单上,那就更好了:)
尝试
在 TForm1::Button1Click() 上进行了以下测试,这是窗体上的按钮事件:
-
测试 1
- 说明:直接创建数组
-
代码:
TButton Buttons[3]; -
结果:编译错误:
> [C++ Error] Unit1.cpp(23): E2248 Cannot find default constructor > to initialize array element of type 'TButton' - 评论:
- 我测试了这个测试的一些变体(例如
TButton Buttons = new TButton[3],使用calloc函数等),但它们都指向TButton没有没有参数的构造函数的问题,即@987654334 @,但只有TButton (TComponent *AOwner)、TButton(void *ParentWindow)和TButton(const TButton &); - 有什么方法可以将运算符
new与TButton构造函数原型的参数一起用于数组?
- 我测试了这个测试的一些变体(例如
-
测试 2
- 说明:创建向量
-
代码:还要在单元标题上添加
#include "vector.h"...vector<TButton> Buttons; Buttons[0].Caption="it is ok"; Buttons[1].Caption="mayday, mayday"; -
结果:第 3 行的调试器异常:
> Project Project1.exe raised exception class EAccessViolation > with message 'Acceess violation at address 401075B9 in module > 'vcl60.bpl'. Read of address 00000254'. Proccess stopped. Use > Step or Run to continue. - 评论:
- 是的,我希望它会被提升,但我把它放在这里给某人说如何在创建后为该向量上的更多元素分配内存,因为
vector<TButton> Buttons(3);不工作的原因与 test1 失败的原因相同 :(
- 是的,我希望它会被提升,但我把它放在这里给某人说如何在创建后为该向量上的更多元素分配内存,因为
一般问题
如何为任何可视化组件做到这一点?
【问题讨论】:
标签: c++builder