我有一个TForm
,其中有两个TMemo
对象和一个TPopupMenu
。两个TMemo
使用相同的TPopupMenu
。
弹出菜单中有一项通过使用TAction
来“清除”备注的项目。
我的问题是,当单击TMemo
之一上的菜单项时,如何确定哪个TMemo
是显示TPopupMenu
的那个?
我在TAction
的执行函数中具有以下代码:
TAction* action = dynamic_cast<TAction*>(Sender);
TMenuItem* item = dynamic_cast<TMenuItem*>(action->ActionComponent);
if(item)
{
if(dynamic_cast<TMemo*>(item->Owner))
{
dynamic_cast<TMemo*>(item->Owner) -> Clear();
}
}
但是TMenuItem
的所有者不是TMemo
。
有任何提示吗?我希望避免必须使用两个不同的TPopupMenu
。
您需要使用TPopupMenu::PopupComponent
属性来了解哪个TMemo
调用了菜单:
TMemo *memo = dynamic_cast<TMemo*>(PopupMenu1->PopupComponent);
if (memo)
memo->Clear();
或者,如果您想发现TPopupMenu
链接到的TMenuItem
:
TAction* action = static_cast<TAction*>(Sender);
TMenuItem* item = dynamic_cast<TMenuItem*>(action->ActionComponent);
if (item)
{
TPopupMenu *popup = dynamic_cast<TPopupMenu*>(item->GetParentMenu());
if (popup)
{
TMemo *memo = dynamic_cast<TMemo*>(popup->PopupComponent);
if (memo)
memo->Clear();
}
}