Delphi 如何保存和加载多个标签的标题?

Delphi 如何保存和加载多个标签的标题?,delphi,save,delphi-7,tmemo,Delphi,Save,Delphi 7,Tmemo,我需要保存和加载几个标签的标题。我尝试使用TMemo来实现以下目的: procedure TForm1.Button1Click(Sender: TObject); begin if SaveDialog1.Execute then begin Memo1.Lines.SaveToFile(saveDialog1.FileName+'.txt'); end; end; procedure TForm1.Button2Click(S

我需要保存和加载几个标签的标题。我尝试使用TMemo来实现以下目的:

procedure TForm1.Button1Click(Sender: TObject);    
begin    
  if SaveDialog1.Execute then
  begin    
     Memo1.Lines.SaveToFile(saveDialog1.FileName+'.txt');    
  end;    
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
  end;
end;
但我不知道如何在TMemo上设置和获取Label1、Label2等的具体数据


基于这个想法,稍后我将使用其他组件作为TEdit。

这里包含一个备忘录真的没有任何意义。您可能正在寻找
TStringList

您需要先将标签内容写入字符串列表:

procedure TForm1.Button1Click(Sender: TObject);
var
  SL: TStringList;
begin
  if SaveDialog1.Execute then
  begin
    SL := TStringList.Create;
    try
      SL.Add(Edit1.Text);
      SL.Add(Edit2.Text);
      // Rest of edits
      SL.SaveToFile(SaveDialog1.FileName);
    finally
      SL.Free;
    end;
  end;
end;
回顾:

procedure TForm1.Button2Click(Sender: TObject);
var
  SL: TStringList;
begin
  if OpenDialog1.Execute then
  begin
    SL := TStringList.Create;
    try
      SL.LoadFromFile(OpenDialog1.FileName);
      Edit1.Text := SL[0];
      Edit2.Text := SL[1];
      // Same for rest of edits
    finally
      SL.Free;
    end;
  end;
end;

如果要对许多编辑控件执行此操作,则可能使用了错误的用户界面。如果不知道您要完成什么,就很难提出其他建议。

我认为最简单的方法是使用字符串列表(
TStringList
)而不是备忘录控件。它允许您保存名称/值对,因此名称可以是标签的名称(或任何其他唯一标识符),它们的值是要在标签中显示的标题

procedure TForm1.LoadFile(AFilename: String);
var
  Lst: TStringList;
begin
  Lst:= TStringList.Create;
  try
    Lst.LoadFromFile(AFilename);
    Label1.Caption:= Lst.Values['Label1'];
    Label2.Caption:= Lst.Values['Label2'];
    ...
  finally
    Lst.Free;
  end;
end;

procedure TForm1.SaveFile(AFilename: String);
var
  Lst: TStringList;
begin
  Lst:= TStringList.Create;
  try
    Lst.Values['Label1']:= Label1.Caption;
    Lst.Values['Label2']:= Label2.Caption;
    ...
    Lst.SaveToFile(AFilename);
  finally
    Lst.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);    
begin    
  if SaveDialog1.Execute then begin    
    SaveFile(saveDialog1.FileName+'.txt');    
  end;    
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if OpenDialog1.Execute then begin
    LoadFile(OpenDialog1.FileName);
  end;
end;
我根据我的要求对此进行了一些修改

procedure TForm1.ButtonSaveClick(Sender: TObject);
var
  I: Integer;
  Strings: TStringList;
begin
  if SaveDialog1.Execute then
  begin
  Strings := TStringList.Create;
  try
    for I := 0 to ComponentCount - 1 do
      begin
      if Components[I] is TLabel then
        Strings.Values[Components[I].Name] := TLabel(Components[I]).Caption;
      if Components[I] is TEdit then
        Strings.Values[Components[I].Name] := TEdit(Components[I]).Text;
    end;
    Strings.SaveToFile(SaveDialog1.FileName);
  finally
    Strings.Free;
  end;
end;
end;

procedure TForm1.ButtonLoadClick(Sender: TObject);
var
  I: Integer;
  Control: TComponent;
  Strings: TStringList;
begin
  if OpenDialog1.Execute then
  begin
  Strings := TStringList.Create;
  try
    Strings.LoadFromFile(OpenDialog1.FileName);
    for I := 0 to Strings.Count - 1 do
    begin
      Control := FindComponent(Strings.Names[I]);
      if Control is TLabel then
        TLabel(Control).Caption := Strings.ValueFromIndex[I];
      if Control is TEdit then
        TEdit(Control).Text := Strings.ValueFromIndex[I];
    end;
  finally
    Strings.Free;
    end;
  end;
end;

我个人永远不会鼓励某人将值从标签复制到备忘录控件,然后复制到文件,反之亦然。@Jerry:我同意。思考这个问题(正在看电视上的节目)并在你评论时更新答案。我刚刚意识到你的解释中有一个矛盾。。。您使用的是
TLabel
控件还是
TEdit
控件?您需要一些结构化存储,例如TIniFile或XML文件。@Jerrydoge我犯了一个错误,我使用的是TLabel控件,但基于这个想法,稍后我将使用其他组件作为TEdit。@TIniFile和XML文件的工作原理是什么?如果您搜索术语“delphi”和“TiniFile”您将获得许多如何使用它的示例?基于此想法,您可以为表单的所有标签绘制流程。@TLama我考虑过这一点,但没有时间提及,更不用说写了:-)@TLama只是自动化了…我喜欢它;)