2015-11-02 3 views
3

Я использую C++ Builder для разработки приложения. Я хочу повторить все TMenuItems внутри моего MainMenu, потому что я хочу изменить заголовок некоторых из них. Я использовал этот код:Как изменить видимость TMenuItem в C++ builder?

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

Я думаю, что это должно работать, но я всегда получаю сбой приложения. С такого рода сообщения:

Debugger Exception Notification Project Project1.exe поднял класс исключения EAccessViolation с нарушением доступа сообщение по адресу 501C380E в модуле vcl120.bpl. Чтение адреса 0000003C.

Любая помощь будет оценена по достоинству.

+2

Попробуйте 'MainMenu1-> Items-> Items [i]'. –

ответ

2

TMenu имеет свойство типа

_property TMenuItem* Items 

который в свою очередь имеет свойство типа массива

__property TMenuItem* Items[int Index] 

Таким образом, решение (как нм уже заметили), чтобы написать

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

Спасибо! Он работал очень хорошо ... – Tirma

+2

В качестве альтернативы, 'TMenuItem' имеет' operator [] 'в C++, что, по-видимому, первоначально пыталось вызвать Tirma. Правильный синтаксис для вызова этого оператора: 'TMenuItem * tmpAction = (* (MainMenu1-> Items)) [i];' Не так элегантно, как просто вызывать 'MainMenu1-> Items-> Items []' вместо этого. –