首页 > 解决方案 > 从 Vcl.Controls.TCustomControl 继承的自定义控件无权访问 SetPopupMenu

问题描述

我有一个继承自的自定义控件Vcl.Controls.TCustomControl

我想为其分配一个TPopupMenu实例,但这不起作用,因为 PopupMenu 似乎无法访问。

我不确定这是为什么?在线文档似乎表明 PopupMenu 在 TCustomControl 中可用?然而__property TPopupMenu* PopupMenu = {read=FPopupMenu, write=SetPopupMenu};protected

我重新定义public了自定义控件中的属性但是现在错误是SetPopupMenu无法访问。SetPopupMenu未列为protected。也许private?我在文档中没有看到它。

这是一个虚拟实现吗?是否像添加TPopupMenu成员和自己编写SetPopupMenu函数一样简单?我错过了什么?

标签: c++buildervcl

解决方案


PopupMenu属性protected在 中TControl且未在 中提升TCustomControl。所以你需要将它提升public/__published在你的派生类中,但不要完全重新声明它,这听起来像是你正在尝试做的。

是的,SetPopupMenu()private(in TControl),因此派生类无法访问。

尝试这个:

class TMyControl : public TCustomControl
{
    ...
__published:
    __property PopupMenu; // <-- that is all you need!
};

protected对于要在派生控件中公开访问权限的任何其他基本属性也是如此。


推荐阅读