我在CodeGear C ++ VCL应用程序中有许多相关的TMenuItems。
每个TMenuItem都与相同的动作(TAction)相关联。
单击MenuItem时,操作将触发(其执行方法)。
我将需要以某种方式在操作OnExecute函数中强制转换Sender参数,以确定单击了哪个menuitem。
目前我有类似的东西
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。
答案 0 :(得分: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..";
}
}