在 运行 时间向组件添加事件
add event to component in the run time
您好,知道如何在 运行 时间内向构造的按钮添加事件吗?
我了解如何在 运行 时间内构建组件,但添加事件是另一回事。有任何例子来解释它是如何工作的吗?
谢谢
VCL 事件只是指向特定对象的 class 方法的指针。您可以直接分配该指针,例如:
__fastcall TForm1::TForm1(TComponent *Owner)
: TForm(Owner)
{
TButton *btn = new TButton(this);
btn->Parent = this;
// set other properties as needed...
btn->OnClick = &ButtonClicked;
/*
behind the scenes, this is actually doing the equivalent of this:
TMethod m;
m.Data = this; // the value of the method's hidden 'this' parameter
m.Code = &TForm1::ButtonClicked; // the address of the method itself
btn->OnClick = reinterpret_cast<TNotifyEvent&>(m);
*/
}
void __fastcall TForm1::ButtonClicked(TObject *Sender)
{
// do something ...
}
您好,知道如何在 运行 时间内向构造的按钮添加事件吗? 我了解如何在 运行 时间内构建组件,但添加事件是另一回事。有任何例子来解释它是如何工作的吗?
谢谢
VCL 事件只是指向特定对象的 class 方法的指针。您可以直接分配该指针,例如:
__fastcall TForm1::TForm1(TComponent *Owner)
: TForm(Owner)
{
TButton *btn = new TButton(this);
btn->Parent = this;
// set other properties as needed...
btn->OnClick = &ButtonClicked;
/*
behind the scenes, this is actually doing the equivalent of this:
TMethod m;
m.Data = this; // the value of the method's hidden 'this' parameter
m.Code = &TForm1::ButtonClicked; // the address of the method itself
btn->OnClick = reinterpret_cast<TNotifyEvent&>(m);
*/
}
void __fastcall TForm1::ButtonClicked(TObject *Sender)
{
// do something ...
}