【问题标题】:Two TMemo objects sharing one TPopupMenu两个 TMemo 对象共享一个 TPopupMenu
【发布时间】:2019-10-25 22:32:19
【问题描述】:

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

有什么提示吗?我希望避免不得不使用两个不同的TPopupMenus。

【问题讨论】:

  • TPopupMenu.PopupComponent 应该会有所帮助。 Owner 根本没有帮助,因为它只是告诉你是什么负责释放菜单本身,并且将成为它被丢弃的形式。

标签: c++builder vcl


【解决方案1】:

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

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

或者,如果您想发现 TMenuItem 链接到的 TPopupMenu

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();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 2010-10-22
    相关资源
    最近更新 更多