首页 > 解决方案 > 两个 TMemo 对象共享一个 TPopupMenu

问题描述

我有TForm两个TMemo对象和一个TPopupMenu。两个TMemos 都使用相同的TPopupMenu.

弹出菜单有一个用于“清除”备忘录的项目,通过使用TAction.

我的问题是,当单击其中一个TMemos 上的菜单项时,我如何才能确定哪个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的 s。

标签: c++buildervcl

解决方案


您需要使用该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();
    }
}

推荐阅读