c++builder - 两个 TMemo 对象共享一个 TPopupMenu
问题描述
我有TForm
两个TMemo
对象和一个TPopupMenu
。两个TMemo
s 都使用相同的TPopupMenu
.
弹出菜单有一个用于“清除”备忘录的项目,通过使用TAction
.
我的问题是,当单击其中一个TMemo
s 上的菜单项时,我如何才能确定哪个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。
解决方案
您需要使用该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();
}
}
推荐阅读
- node.js - 使用节点 js SOAP 或任何其他的 Soap API 调用?
- node.js - 用 post 设置 cookie 不让我登录
- ios - 专辑中的Livephoto问题:没有先播放片段
- c# - 如何将请求标头输出到C#中的字符串
- ios - 将 MKCircle 添加到地图上的注释 - 设置 CLLocationCoordinate2D 时出现问题
- jwt - 为什么要向 JWO 添加标头?
- python - docker alpine image里面的python
- javascript - Javascript中的累积和数组,一个有效,一个无效
- java - 如何读取禁用匿名访问的 Nexus Maven 存储库?
- python - 从其他数据框创建新数据框,但出现索引和值(Nan)问题保持