我想创建一个矩形按钮字段(使用列表)。 "细胞"在这个领域基本上是按钮,我唯一需要改变的是OnClick事件处理程序(我希望它检查一些按钮属性并根据它们采取一些行动)。 我之前在MSVS 2013中做了类似的事情,使用C ++ / CLR,我只是编写了我想用作事件处理程序的方法,将事件处理程序变量添加到" cell"构造函数,并将其指定为新的事件处理程序,同时填充"列表。 它看起来像这样:
·H
cell(<...>, System::EventHandler^ eh) : {
<...>;
Click += eh;
}
的.cpp
List^ list = gcnew List(<...>, gcnew System::EventHandler(^Form1, &Form1::cell_Click));
先生。谷歌告诉我,在C ++ Builder中,托管对象的继承不仅仅是在类声明后写一个冒号,而是一个名为&#34;创建组件&#34;的过程。
由于我不需要重复使用这一小段代码,因此我不想创建任何软件包或使用现有软件包。所以我创建了一个单元。
问题是:
答案 0 :(得分:1)
C ++ Builder使用C ++作为语言,而不是“托管C ++”。没有^
指针类型,没有gcnew
或“托管对象”。
要轻松创建事件处理程序,请在表单编辑器中选择该控件,然后按F11。这将打开Object Inspector。选择“事件”选项卡,然后双击要创建的处理程序。这将创建您需要的代码,您只需填写函数体。
如果双击该控件,它就是为该对象创建最常见的事件处理程序的快捷方式(实际上是OnClick的按钮,因此您只需双击按钮)。
(在旧版本的C ++ Builder中,如果你在函数体中输入任何东西之前保存了你的项目,它会非常友好地删除处理程序,这非常令人讨厌 - XE5不再这样做了。)
我不太明白你在一些帖子中谈到的是什么 - 你为什么要继承这个按钮?我从你的开头段落中想到,你只想在运行时创建一堆按钮,并实现OnClick处理程序。
如果你的意思是你只是想在运行时创建很多按钮,那么就可以这样做:
TButton *b = new TButton(this); // 'this' will be responsible for deleting the button
b->Parent = this; // `this` will be responsible for displaying the button
b->Caption = "hello";
b->OnClick = Button1->OnClick;
// set other properties
AFAIK没有简单的克隆按钮的方法。您必须创建一个这样的新按钮,然后从另一个按钮复制您想要的值。您未设置的属性将具有默认值。
如果您使用此方法(即在表单编辑器中生成Button1,然后将其OnClick
复制到其他按钮),这很简单。实际上,您可以在使用它来自动生成OnClick处理程序并为您提供正确的函数签名后删除Button1
。
您还可以将指针存储到列表中的每个按钮,例如std::list<TButton *>
。在执行此操作时请注意按钮生命周期:按钮的所有者是表单的事实意味着表单将在表单销毁期间删除它们。您不应该尝试自己删除这些指针,并且不应在表单销毁期间或之后使用它们。
在OnClick处理程序中,您可以通过执行以下操作获取指向其Button的指针:
TButton *b = dynamic_cast<TButton *>(Sender);
然后您可以使用按钮的b->Tag
或其他属性来识别单击了哪个按钮。