C++builder 两个TMemo对象共享一个TPopupMenu

C++builder 两个TMemo对象共享一个TPopupMenu,c++builder,vcl,C++builder,Vcl,我有一个t表单,它有两个TMemo对象和一个TPopupMenu。两个TMemos使用相同的TPopupMenu 弹出菜单中有一项通过使用按钮来“清除”备忘录 我的问题是,当单击其中一个TMemos上的菜单项时,如何确定哪个TMemo是显示TPopupMenu的菜单项 我在战术的执行功能中有以下代码: TAction* action = dynamic_cast<TAction*>(Sender); TMenuItem* item = dynamic_cast<TMenuIt

我有一个
t表单
,它有两个
TMemo
对象和一个
TPopupMenu
。两个
TMemo
s使用相同的
TPopupMenu

弹出菜单中有一项通过使用
按钮来“清除”备忘录

我的问题是,当单击其中一个
TMemo
s上的菜单项时,如何确定哪个
TMemo
是显示
TPopupMenu
的菜单项

我在
战术
的执行功能中有以下代码:

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();
    }
}
TAction*action=dynamic_cast(发送方);
TMenuItem*item=dynamic\u cast(动作->动作组件);
如果(项目)
{
if(动态施法(项目->所有者))
{
动态施法(物品->所有者)->清除();
}
}
但是
TMenuItem
的所有者不是
TMemo


有什么提示吗?我希望避免使用两种不同的
TPopupMenu
s.

您需要使用
TPopupMenu::PopupComponent
属性来了解哪个
TMemo
调用了菜单:

TMemo *memo = dynamic_cast<TMemo*>(PopupMenu1->PopupComponent);
if (memo)
    memo->Clear();

tpopumenu.PopupComponent
应该会有所帮助
Owner
一点帮助都没有,因为它只是告诉您释放菜单本身的原因,并且将是它被拖放到的表单。
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();
    }
}