两个TMemo对象共享一个TPopupMenu

问题描述 投票:0回答:1

我有一个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

c++builder vcl
1个回答
0
投票

您需要使用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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.