尝试编写一个简单的 VCL 程序用于教育目的(动态创建的表单、控件等)。有这样一个示例代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TForm* formQuiz = new TForm(this);
formQuiz->BorderIcons = TBorderIcons() << biSystemMenu >> biMinimize >> biMaximize;
formQuiz->Position = TPosition::poDesktopCenter;
formQuiz->Width = 250;
formQuiz->Height = 250;
formQuiz->Visible = true;
TButton* btnDecToBin = new TButton(formQuiz);
btnDecToBin->Parent = formQuiz;
btnDecToBin->Left = 88;
btnDecToBin->Top = 28;
btnDecToBin->Caption = "Dec to Bin";
btnDecToBin->Visible = true;
}
我想知道如何为动态创建的按钮编写函数,以便在单击按钮时调用它。在这个例子中我需要一个'btnDecToBin->Click();' func 但我不知道我应该把它放在哪里。
在“void __fastcall TForm1::Button1Click(TObject *Sender){}
”内部?
我将不胜感激任何输入,一些 关键字 也适用于 google。
最佳答案
你可以做两件事,你可以创建一个 Action 并将它与按钮相关联,或者你可以像这样创建一个函数:
void __fastcall TForm1::DynButtonClick(TObject *Sender)
{
// Find out which button was pressed:
TButton *btn = dynamic_cast<TButton *>(Sender);
if (btn)
{
// Do action here with button (btn).
}
}
您可以通过设置 OnClick 属性将其绑定(bind)到按钮实例 btnDecToBin->OnClick = DynButtonClick
请注意该函数位于表单 Form1 中。由于闭包的性质(编译器特定的添加),这将起作用。如果您在 formQuiz
之前删除 Form1
而不删除对单击事件的引用,则会出现问题。在许多方面,在这种情况下使用 Action 可能是更干净的解决方案。
编辑: 另一种方法是,如果您的测验表单有标准布局,您可以制作一个自定义的 TQuizForm
类继承自 TForm
。这样您就不必在每次创建表单时都绑定(bind)事件。
关于c++ - 如何为动态创建的按钮编写函数 Click()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2116959/