Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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++ 如何使用循环从TEdit中逐个获取文本_C++_Controls_C++builder_Vcl_Editcontrol - Fatal编程技术网

C++ 如何使用循环从TEdit中逐个获取文本

C++ 如何使用循环从TEdit中逐个获取文本,c++,controls,c++builder,vcl,editcontrol,C++,Controls,C++builder,Vcl,Editcontrol,我有100个TEdit的对象(例如) 编辑1,编辑2,编辑3。。。编辑100 如何使用循环逐个从中获取文本?类似的方法应该可以: for (int i = 0; i < form->ControlCount; ++i) { TEdit *edit = dynamic_cast<TEdit *>(form->Controls[i]); if (edit) ShowMessage(edit->Text); } for(int i

我有100个TEdit的对象(例如)

编辑1,编辑2,编辑3。。。编辑100


如何使用循环逐个从中获取文本?

类似的方法应该可以:

for (int i = 0; i < form->ControlCount; ++i)
{
  TEdit *edit = dynamic_cast<TEdit *>(form->Controls[i]);

  if (edit)
    ShowMessage(edit->Text);        
}
for(int i=0;iControlCount;++i)
{
TEdit*编辑=动态(表格->控件[i]);
如果(编辑)
显示消息(编辑->文本);
}

代码基于转换:如果强制转换失败,它将返回一个空指针,您可以跳过当前控件。

我建议使用一个数组,例如:

class TForm1 : public TForm
{
__published:
    TEdit *Edit1;
    TEdit *Edit2;
    TEdit *Edit3;
    ...
private:
    TEdit* edits[100];
    ...
public:
    __fastcall TForm1(TComponent *Owner);
    ...
};

__fastcall TForm1::TForm1(TComponent *Owner)
{
    for(int i = 0; i < 100; ++i)
    {
        edits[i] = static_cast<TEdit*>(FindComponent("Edit"+IntToStr(i+1)));
    }
}

...

for(int i = 0; i < 100; ++i)
{
    //  use edits[i]->Text as needed...
}
类TForm1:公共TForm
{
__出版:
TEdit*Edit1;
TEdit*Edit2;
TEdit*Edit3;
...
私人:
TEdit*编辑[100];
...
公众:
__fastcall TForm1(t组件*所有者);
...
};
__fastcall TForm1::TForm1(TComponent*Owner)
{
对于(int i=0;i<100;++i)
{
编辑[i]=静态_转换(FindComponent(“编辑”+IntToStr(i+1)));
}
}
...
对于(int i=0;i<100;++i)
{
//根据需要使用编辑[i]->文本。。。
}
TEdit*tmpEdit=NULL;
矢量tmpStr;
对于(int i=0;i<100;++i)
{
tmpEdit=静态_cast(FindComponent(“编辑”+IntToStr(i+1));
tmpStr.推回(tmpEdit->Text);
}

如果您显示一些需要帮助的代码,您会得到更好的响应。StackOverflow社区不赞成那些看起来像是家庭作业的问题,而不需要原始海报(在本例中是您)的任何初步努力。您将这些“TEdit”对象存储在什么位置,例如数组、STL列表?对于要调用的TEdit对象,您有哪些方法?您想对数据做什么?查看
FindComponentl(componentname)
,然后将其与
“Edit1”
“Edit2”
等一起使用。这些名称可以在循环中生成。@RudyVelthuis非常感谢您的链接;-)只有当
TEdit
控件是表单本身的直接子控件,而不是表单上的某个其他
Parent
容器(如面板、框架、选项卡页等)时,这才会如图所示起作用。此外,这会循环遍历所有可用的
TEdit
控件,但如果OP只对其中的一个子集感兴趣,该怎么办?而且,这只是考虑了创作顺序,而不是命名顺序。@RemyLebeau好吧,这是真的,但片段只是一个“概念证明”。它可以通过递归进行扩展以处理嵌套控件(过滤结果非常容易)。实际上,树遍历顺序可能是一个问题。
TEdit *tmpEdit = NULL ;
vector <AnsiString> tmpStr ;
for(int i = 0; i < 100; ++i)
{
    tmpEdit = static_cast<TEdit*>(FindComponent("Edit"+IntToStr(i+1)));
    tmpStr.push_back(tmpEdit->Text) ;
}