在运行时动态创建多个框架(C ++,FMX,IDE:C ++ Builder)时出错]]

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

我想动态创建一系列Frame组件,然后将指针保存到向量中。

我能够毫无问题地动态创建TEdit组件,但是如果将TEdit替换为框架组件(包含编辑框)的名称,程序将出错。将创建第一个框架,但是在创建第二个框架时出错,指出“外部异常EEFFACE”

这里是相关代码。请注意,如果我用TEdit替换TFrame2,它将起作用。

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

单击两次后出现错误消息。

enter image description here

这是我希望它在两次单击后的外观。

enter image description here

这是在单击3次后用TEdit替换TFrame2的样子。

enter image description here

-

编辑

如果我尝试对两个框架的创建进行硬编码,则在第一次单击时会遇到相同的错误。

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

在此帖子中

Can FireMonkey frames be created dynamically?

我看到一条评论指出

[我应该在这里注意,似乎至少在使用C ++时,框架对象需要在创建后立即手动分配唯一的Name属性,否则创建的下一个具有相同类型的框架对象将尝试使用与第一个。

我想动态创建一系列Frame组件,然后将指针保存到向量中。我能够毫无问题地动态创建TEdit组件,但是如果我将TEdit替换为...

c++ firemonkey c++builder tframe
1个回答
0
投票

为了解决此问题,我需要在运行时设置框架的名称。在Button1 click方法中添加以下代码可解决此问题。

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