Я хотел бы динамически создать серию компонентов Frame, а затем сохранить указатели в векторе.
Я могу динамически создавать компоненты TEdit без проблем, но если я заменю TEdit именем компонент кадра (который содержит поле для редактирования) программа выдаст ошибку. Первый кадр будет создан, но при создании второго возникнет ошибка с указанием «Внешнее исключение EEFFACE»
Вот соответствующий код. Обратите внимание, что если я заменю TFrame2 на TEdit, это сработает.
class TForm1 : public TForm
{
...
public: // User declarations
std::vector<TFrame2*> fields;
...
};
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TFrame2* temp = new TFrame2 (Layout1);
temp->Parent = Layout1;
temp->Align = TAlignLayout::Top;
fields.push_back(temp);
count++;
}
Вот как это выглядит после одного клика.
![enter image description here](https://i.stack.imgur.com/bMpRNm.png)
Сообщение об ошибке после 2-х нажатий.
![enter image description here](https://i.stack.imgur.com/yI39om.png)
Вот как я хочу, чтобы оно выглядело после двух нажатий.
![enter image description here](https://i.stack.imgur.com/lG8mxm.png)
Вот как это выглядит, когда я заменяю TFrame2 на TEdit после 3 щелчков.
![enter image description here](https://i.stack.imgur.com/8F9Sam.png)
-
РЕДАКТИРОВАТЬ
Если я пытаюсь жестко запрограммировать создание двух фреймов, я получаю ту же ошибку при первом клике.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TFrame2* temp = new TFrame2 (Layout1);
temp->Parent = Layout1;
temp->Align = TAlignLayout::Top;
fields.push_back(temp);
count++;
TFrame2* temp1 = new TFrame2 (Layout1);
temp1->Parent = Layout1;
temp1->Align = TAlignLayout::Top;
fields.push_back(temp1);
count++;
}
-
РЕДАКТИРОВАТЬ 2
В этом сообщении
Можно ли динамически создавать фреймы FireMonkey?
Я вижу комментарий, в котором говорится
Здесь следует отметить, что, похоже, объектам фрейма необходимо назначить уникальное свойство Name вручную сразу после создания, по крайней мере, при использовании C ++, или следующий объект фрейма, созданный того же типа, попытается получить то же имя как фи первый.