我想动态创建一系列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++; }
这是单击后的样子。
单击两次后出现错误消息。
这是我希望它在两次单击后的外观。
这是在单击3次后用TEdit替换TFrame2的样子。
-
编辑
如果我尝试对两个框架的创建进行硬编码,则在第一次单击时会遇到相同的错误。
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替换为...
为了解决此问题,我需要在运行时设置框架的名称。在Button1 click方法中添加以下代码可解决此问题。