继承自 Vcl.Controls.TCustomControl 的自定义控件无权访问 SetPopupMenu

Custom made control that inherits from Vcl.Controls.TCustomControl doesn't have access to SetPopupMenu

我有一个继承自 Vcl.Controls.TCustomControl

的自定义控件

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

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

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

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

PopupMenu 属性 在 TControl 中是 protected 而在 TCustomControl 中没有提升。因此,您需要在派生的 class 中 将其提升 public/__published,但不要 重新声明 完全是,听起来你正在尝试这样做。

是的,SetPopupMenu()private(在 TControl 中),因此派生的 classes 无法访问。

试试这个:

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

您希望在派生控件中公开访问的任何其他 protected 基础 属性 也是如此。