0

我在 CodeGear C++ VCL 应用程序中有许多相关的 TMenuItem。

每个 TMenuItem 都与同一个动作 (TAction) 相关联。

单击 MenuItem 时,将触发操作(即其执行方法)。

我将需要以某种方式在操作 OnExecute 函数中转换 Sender 参数,以确定单击了哪个菜单项。

目前我有这样的东西

void __fastcall TMoleculixDesktopMainUnit::openMoleculeSelectionFormAExecute(TObject *Sender)
{
//User selected a menuitem under Molecules Menu

TAction* anItem = dynamic_cast<TAction*>(Sender);


//AminoAcidsMI is a TMenuItem
if(AminoAcidsMI == dynamic_cast<TMenuItem*>(anItem->Owner))
{
    //Open molecule search form with aminoacids
    MLog()<<"Looking for Amino Acids..";
}
}

但以上不起作用动作所有者不是MenuItem。

4

1 回答 1

2

使用TAction::ActionComponent属性,它指定触发操作的组件。

void __fastcall TMoleculixDesktopMainUnit::openMoleculeSelectionFormAExecute(TObject *Sender)
{
    //User selected a menuitem under Molecules Menu

    TAction* anItem = dynamic_cast<TAction*>(Sender);
    if (!anItem) return;

    AminoAcidsMI == dynamic_cast<TMenuItem*>(anItem->ActionComponent);
    if (AminoAcidsMI)
    {
        //Open molecule search form with aminoacids
        MLog()<<"Looking for Amino Acids..";
    }
}
于 2014-10-05T20:32:29.527 回答