来自编辑框的 fprintf (Borland)

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

您好,提前感谢您的帮助。 我有几百个编辑框,我需要将它们的数据转储到文件中。如果我像这样把它们全部写出来就很容易了:

fprintf(data_fptr, "%s", Form1->Edit1->Text);
fprintf(data_fptr, "%s", Form1->Edit2->Text);
fprintf(data_fptr, "%s", Form1->Edit3->Text);

等等...

但我不想。我无意中进入了这个奇特的循环,它节省了大量的代码空间。

edit_n 是我的连接字符串, buffer只是一个数字(1-99)的存储罐 所以第一个字符串看起来像 Form1->Edit1->Text

//-------
data_fptr = fopen("c:\\test\\test.ini", "w+");
char edit_n[80];
char buffer[80];

int n = 1;

do{
sprintf(buffer,"%d",n);
strcat(edit_n, "Form1->Edit"); // first part of the string
strcat(edit_n, buffer);  // number of the Edit box
strcat(edit_n, "->Text");  // last part of the string
fprintf(data_fptr,"%ls\n", edit_n);  // prints the string (data) to the file
n++;  // increments n
sprintf(edit_n,"");  // clears the string for the next use
}
while(n < 100);

fclose(data_fptr);

//--------

它可以工作,但不是将 Edit1 中包含的数据写入文件,而是写入连接字符串“Form1->Edit1->Text”

我缺少什么或者如何让它正常工作?

我尝试了一些我知道要做的事情,我不是专业程序员。

borland-c++
1个回答
0
投票

首先,您不能将

Text
属性按原样传递给
fprintf()
,您必须使用
Text.c_str()
方法来获取正确的
char*
指针。

其次,为了避免一遍又一遍地重复相同的代码,您通过使用循环进入了写入轨道,但您正在向文件写入完全错误的内容。您需要将

TEdit
指针放入数组/容器中,然后循环访问每个指针的
Text
属性,例如:

TEdit* edits[100];
edits[0] = Form1->Edit1;
edits[1] = Form1->Edit2;
...
for(int n = 0; n < 100; ++n)
{
    fprintf(data_fptr, "%s", edits[n]->Text.c_str());
}

如果你不想创建自己的数组,Form 确实有一个

FindComponent()
方法,例如:

for(int n = 0; n < 100; ++n)
{
    TEdit *edit = (TEdit*) Form1->FindComponent("Edit"+String(n));
    fprintf(data_fptr, "%s", edit->Text.c_str());
}
© www.soinside.com 2019 - 2024. All rights reserved.