Events 具有多个发件人的事件

Events 具有多个发件人的事件,events,design-patterns,event-handling,c++builder,Events,Design Patterns,Event Handling,C++builder,如何创建单击四个按钮中任何一个按钮的事件,即避免将相同的代码粘贴到每个按钮的OnClick事件中?我在谷歌发现的唯一一件事是,它有一个(多播)功能。如果它真的存在,你能给我提供一些例子吗?如果没有,你能起草一份吗?假设按钮1->OnClick已经分配: Button2->OnClick = Button1->OnClick Button3->OnClick = Button1->OnClick Button4->OnClick = Button1->OnCli

如何创建单击四个按钮中任何一个按钮的事件,即避免将相同的代码粘贴到每个按钮的OnClick事件中?我在谷歌发现的唯一一件事是,它有一个(多播)功能。如果它真的存在,你能给我提供一些例子吗?如果没有,你能起草一份吗?

假设按钮1->OnClick已经分配:

Button2->OnClick = Button1->OnClick
Button3->OnClick = Button1->OnClick
Button4->OnClick = Button1->OnClick

您可以将相同的处理程序分配给所有四个按钮
OnClick
事件。事件的
Sender
参数将告诉您每次触发事件的按钮。例如:

void __fastcall TMyForm::ButtonClick(TObject *Sender)
{
    TButton *btn = static_cast<TButton*>(Sender);
    ShowMessage("You clicked on " + btn->Name);
}
void __fastcall TMyForm::ButtonClick(TObject *Sender)
{
    TButton *btn = static_cast<TButton*>(Sender);
    switch (btn->Tag)
    {
        ...
    }
}

为什么要使用Tag属性来区分按钮,而不仅仅是比较静态的发送器和指向特定TButton的指针呢?@SamuliHynönen:当然也可以这样做,但每个按钮都需要单独的
if
语句。使用
标记
,可以执行诸如使用
开关
语句、索引数组等操作。这实际上取决于事件处理程序的代码实际执行的操作。