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

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

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

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

我不确定为什么会这样?在线文档似乎暗示可以在TCustomControl中使用PopupMenu吗?但是__property TPopupMenu* PopupMenu = {read=FPopupMenu, write=SetPopupMenu};protected

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

这是一个虚拟实现,是否像添加一个TPopupMenu成员并自己编写一个SetPopupMenu函数那样简单?我想念什么?

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

PopupMenu属性在protected中为TControl,在TCustomControl中不提升。因此,您需要将其promote到派生类中的public / __published,但不必完全redeclare,这听起来像您在尝试做。

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

尝试一下:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.