Delphi 7的Items属性

4
我来自Java背景,我们有带有接口的数据结构,如果是集合它支持某些行为,而集合则有另外一些行为。
在Delphi编程时,当询问项目行为时,我经常遇到难题,这很奇怪。例如,这段代码无法编译。
      menuOfSomeKind.Items.Add(t);

这里的“菜单”是一个组件,其中有包含其他子组件的项,这些项就是菜单条目。

如果我想要动态地编辑它,也就是使用添加操作,它会报错“期望'['但找到'.'”。

请问您能否澄清一下这个问题?

2个回答

2

可能 menuOfSomeKindTMenuItem不是 TMainMenu

如果你要添加一个项目到 TMenuItem,请使用 MenuItem.Add(t);

如果你要添加一个项目到 TMainMenu,请使用 MainMenu.Items.Add(t);


这是一个定制组件,可能继承自TMenuItem。问题已解决。您能否解释一下发送不同对象的添加行为? - none
MainMenu.Items 是 TMenuItem 类型的属性。 - Bharat
1
对象支持“Add()”,如果它们明确声明了函数“Add”。并没有规定它们必须这样做,如果它们这样做了,它们可能会以不同的方式这样做。有些对象将声明一个函数Add和一个索引属性Items[Index],该属性按索引返回项目。其他对象将仅声明属性Items,但该属性不会被索引,而是返回一个对象,该对象反过来实现了Add和[](索引访问)。最终结果是,在第二种情况下,您可以执行Items[]和Items.Add。除了查看文档或代码或尝试之外,没有其他方法可以确定它是哪种情况。 - himself

0

TMainMenu/TMenu和TMenuItem之间有区别。

var
  mainMenu: TMainMenu;
  menu: TMenu;
  subMenu: TMenuItem;
begin
  //***** This creates a new root menu
  mainMenu.Items.Add(TMenuItem.Create);

  //***** Essentially the same as mainMenu
  menu.Items.Add(TMenuItem.Create)

  //***** This adds a new submenu to an existing menu
  subMenu.Add(TMenuItem.Create);

  //***** This adds a new submenu to the first submenu of an existing menu
  subMenu.Items[0].Add(TMenuItem.Create);
end;

请注意,所呈现的代码可以编译,但在运行时会随处抛出异常。首先,没有为任何本地变量分配值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接