Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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
File 如何从框架中获取用户输入并保存到txt文件中?_File_Delphi_Frame_Firemonkey_Tabcontrol - Fatal编程技术网

File 如何从框架中获取用户输入并保存到txt文件中?

File 如何从框架中获取用户输入并保存到txt文件中?,file,delphi,frame,firemonkey,tabcontrol,File,Delphi,Frame,Firemonkey,Tabcontrol,我的程序是这样运行的: 我有一个带有添加按钮、保存按钮和tabcontrol的表单。 单击表单中的add按钮时,tabcontrol将添加更多tabitem。tabitem基本上是从myframe添加的,它包括用户在TEdit中输入值。 我想要实现的是,当我单击表单中的save按钮时,将所有用户输入从框架打印到txt文件。这是我在表单中的代码。谁能给我一些提示吗 我的帧图像: 我的表格图像: 我的代码: 下面应该教你所有你需要的成分 创建一个新的应用程序。我选择制作一个VCL应用程序,但我仔细检

我的程序是这样运行的:

我有一个带有添加按钮、保存按钮和tabcontrol的表单。 单击表单中的add按钮时,tabcontrol将添加更多tabitem。tabitem基本上是从myframe添加的,它包括用户在TEdit中输入值。 我想要实现的是,当我单击表单中的save按钮时,将所有用户输入从框架打印到txt文件。这是我在表单中的代码。谁能给我一些提示吗

我的帧图像:

我的表格图像:

我的代码:


下面应该教你所有你需要的成分

创建一个新的应用程序。我选择制作一个VCL应用程序,但我仔细检查了Firemonkey FMX中的所有步骤是否相同

添加一些编辑框和组合框,如下所示:

将控件分别命名为eFirstName、eLastName、cbSex和btnSave

然后为按钮编写以下OnClick处理程序:

procedure TForm1.btnSaveClick(Sender: TObject);
var
  DataFile: TMemIniFile;
begin
  DataFile := TMemIniFile.Create(TPath.Combine(TPath.GetDocumentsPath, 'PersonalData.txt'));
  try
    DataFile.WriteString('General', 'FirstName', eFirstName.Text);
    DataFile.WriteString('General', 'LastName', eLastName.Text);
    if cbSex.ItemIndex <> -1 then
      DataFile.WriteString('General', 'Sex', cbSex.Items[cbSex.ItemIndex]);
    DataFile.UpdateFile;
  finally
    DataFile.Free;
  end;
end;
仅从屏幕截图看不出这一点,但如果您位于顶部编辑框并反复按Tab键,则会转到第二个编辑框、组合框,最后是按钮。这是因为我确保了选项卡顺序是正确的。你也应该这样做

还要注意带下划线的字符。这些被称为键盘加速器。例如,如果我按Alt+F,焦点将移到“名字”字段。这是通过为标签指定标题文本&名字:并将相应的编辑控件指定给标签的FocusControl属性来实现的

在这种情况下,按钮是默认的,这意味着它是响应Enter键的按钮。如果它不是默认的,并且在您的GUI中,这可能没有意义,我会给它标题&Save并将&Sex:更改为S&ex:。你能猜出原因吗

其他办法 您还可以使用TStringList:


请将代码作为文本而不是图像发布。对于那些想要复制代码某些部分以指出错误/建议的回答者来说,这一点非常重要。我可以在代码中看到一个典型的初学者错误。假设选项卡控件中有五个选项卡。当您将i:=0转换为TabControl1.TabCount时,您将因此而将i:=0转换为5。因此,按顺序考虑,标签0、标签1、标签2、标签3、标签4和…表5?!您尚未指定所需的文件格式。还有,你在挣扎什么?一般来说,是否创建文本文件?从编辑和组合框中获取值?是否从当前选项卡索引中获取控件?因为如果你知道所有这些,你就可以完成整个任务。此外,Q中的文本表明你想将某个特定选项卡保存到一个文件中,但你的代码截图表明你想保存所有选项卡,因为你有这个循环。@AndreasRejbrand是的,先生,我真的是一个初学者。请纠正我,因为我真的在努力学习德尔菲。请引导我。顺便说一句,很抱歉模棱两可,我的问题是当我点击保存按钮时,是的,我想保存帧中Tedit和TCOMBOX的所有信息,最后将输入值打印到txt文件中。问题是我不知道如何才能做到这一点。如果你能指导我,我将不胜感激。顺便说一句,我尝试在FMX中制作相同的应用程序,发现1我在Alt+F等上听到嘟嘟声,2当CB有焦点时,我无法通过按M或F或O选择我的性别,3我无法使用箭头键在CB的下拉状态下导航,4处于下拉状态,列表框似乎需要鼠标悬停的效果,但是没有,在下拉状态下,列表框有一个不必要的滚动条。这就是为什么我不是FMX的超级粉丝:你每分钟会发现大约五个bug。在这之前,先生,TMemIniFile是否适合android应用程序?还有,如果我想把这一切保存在TStringList中,那有可能吗?因为我不知道如何将我所有的TEDIT和Tcombobox转换成TStringlist@wlsiow96例如我不知道。我对安卓一无所知。但我怀疑是这样。尽管该文件使用Windows API,但TMemIniFileis完全是用Pascal实现的。它实际上是基于一个普通的TStringList。但为了确定,我将使用基于TStringList的解决方案更新我的A。@wlsiow96:我不确定我是否理解该评论。您的意思是要保存所有选项卡用户,而不仅仅是单个选项卡用户?
[General]
FirstName=Andreas
LastName=Rejbrand
Sex=Male
procedure TForm1.btnSaveClick(Sender: TObject);
var
  DataFile: TStringList;
begin
  DataFile := TStringList.Create;
  try
    DataFile.AddPair('FirstName', eFirstName.Text);
    DataFile.AddPair('LastName', eLastName.Text);
    if cbSex.ItemIndex <> -1 then
      DataFile.AddPair('Sex', cbSex.Items[cbSex.ItemIndex]);
    DataFile.SaveToFile(TPath.Combine(TPath.GetDocumentsPath, 'PersonalData.txt'),
      TEncoding.UTF8);
  finally
    DataFile.Free;
  end;
end;