我有许多相关的TMenuItems,在CodeGear C++ VCL应用程序中。
每个TMenuItem都与相同的操作(TAction)相关联。
单击MenuItem时,该操作将触发(其执行方法即是)。
我需要以某种方式在actions 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。
发布于 2014-10-05 20:32:29
使用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..";
}
}https://stackoverflow.com/questions/26206496
复制相似问题