Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在运行时动态创建多个帧时的错误(C++,fMX,ID:C++ +Builder)_C++_Firemonkey_C++builder_Tframe - Fatal编程技术网

在运行时动态创建多个帧时的错误(C++,fMX,ID:C++ +Builder)

在运行时动态创建多个帧时的错误(C++,fMX,ID:C++ +Builder),c++,firemonkey,c++builder,tframe,C++,Firemonkey,C++builder,Tframe,我想动态创建一系列帧组件,然后将指针保存到向量中 我能够毫无问题地动态创建TEdit组件,但是如果我用包含编辑框的框架组件的名称替换TEdit,程序将出错。将创建第一个帧,但在创建第二个帧时出错,并声明外部异常EEFFACE 这是相关代码。请注意,如果我用TEdit替换TFrame2,它就会工作 class TForm1 : public TForm { ... public: // User declarations std::vector<TFrame2*> fi

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

我能够毫无问题地动态创建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++;
}
-

编辑2

在这个岗位上

我看到一条评论说

这里我应该注意到,框架对象在创建后需要手动分配一个唯一的名称属性,至少在使用C++时,或由同一类型创建的下一个框架对象将尝试与第一个名称相同的名称。


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

temp->Name = std::strcat("TFrame2", std::to_string(count).c_str());

这会将每个新帧命名为TFrame2,其中是已创建的数字帧。

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

temp->Name = std::strcat("TFrame2", std::to_string(count).c_str());

这会将每个新帧命名为TFrame2,其中是已创建的数字帧。

或者,您可以指定一个空字符串:temp->Name=\u D;也可以在设计时清除对象检查器中的名称。如果您从未使用Layout1->FindComponent方法搜索分配的名称,则实际上不需要该名称。或者,您也可以分配一个空字符串:temp->Name=\u D;也可以在设计时清除对象检查器中的名称。如果不使用Layout1->FindComponent方法搜索指定的名称,则实际上不需要该名称。