【问题标题】:How to change visibility of TMenuItem in c++ builder?如何在 c++ builder 中更改 TMenuItem 的可见性?
【发布时间】:2015-11-02 09:50:21
【问题描述】:

我正在使用 C++ Builder 开发应用程序。 我想遍历 MainMenu 中的所有 TMenuItem,因为我想更改其中一些的标题。 我使用了这段代码:

 int numAction = MainMenu1->Items->Count;
 for (int i=0;i<numAction;i++)
 {
        TMenuItem* tmpAction = &MainMenu1->Items[i];
        tmpAction->Caption = "Test Caption";
 }

我认为它应该可以工作,但我总是遇到应用程序崩溃。有了这样的信息:

调试器异常通知项目 Project1.exe 引发异常类 EAccessViolation 并显示地址访问冲突消息 模块 vcl120.bpl 中的 501C380E。读取地址 0000003C。

任何帮助将不胜感激。

【问题讨论】:

  • 试试MainMenu1-&gt;Items-&gt;Items[i]

标签: c++ c++builder


【解决方案1】:

TMenu 有一个类型的属性

_property TMenuItem* Items

它又具有数组类型的属性

__property TMenuItem* Items[int Index]

所以,解决方案是(正如 n.m. 已经注意到的那样)写

TMenuItem* tmpAction = MainMenu1->Items->Items[i];

【讨论】:

  • 另外,TMenuItem 在 C++ 中有一个 operator[],这可能是 Tirma 最初试图调用的。调用该运算符的正确语法是 TMenuItem* tmpAction = (*(MainMenu1-&gt;Items))[i]; 不像调用 MainMenu1-&gt;Items-&gt;Items[] 那样优雅。
猜你喜欢
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 2016-07-04
  • 2019-08-14
相关资源
最近更新 更多