保存并加载Checklistbox选中的项目到.ini文件

时间:2016-01-24 13:49:32

标签: delphi delphi-xe delphi-xe7

我想保存到.ini并在保存的ini文件中填写checklistbox项目。我有2个列表框,如...

第一个列表框包含表格:

  • 汽车
  • 客户
  • 用户
  • 供应商

第二个列表框链接到第一个,如果我点击Cars表并检查它,下面的数据将在第二个checklistbox上可见...

第二个列表框包含表格字段:

CARS

- Car_ID
- Car_Name
- Car_LicNum
- Car_Color etc..

用户

  • USER_ID
  • 的User_Name
  • User_Password等...

enter image description here

任何人都可以帮助我如何将所有选中的项目(从checklistbox 1和checklistbox2)保存到.ini文件?之后如何加载和填写清单箱?

我为第一个checklistbox做了但是......

procedure TForm1.btn_SaveClick(Sender: TObject);
begin
ini := TIniFile.Create('C:\checklistbox.ini');
  try
    for i := 0 to Checklistbox1.Items.Count - 1 do
      ini.WriteBool('items', Checklistbox1.Items[i], Checklistbox1.Checked[i]);
  finally
    ini.Free;
  end;
end;

将物品装入checklistbox1

procedure TForm1.btn_LoadClick(Sender: TObject);
begin
ini := TIniFile.Create('c:\checklistbox.ini');
  try
    ini.ReadSection('items', Checklistbox1.Items);
      for i := 0 to Checklistbox1.Items.Count - 1 do
        CheckListbox1.Checked[i] := ini.ReadBool('items', Checklistbox1.Items[i], False);
 finally
   ini.Free;
 end;
end;

我不知道如何从checklistbox2中保存哪些项目链接到checklistbox1项目。我想在之后加载所有检查的项目。我目前正在使用Delphi XE7。谢谢你的答案!

1 个答案:

答案 0 :(得分:0)

我猜你的问题是关注第二个列表框的内容发生变化这一事实,因此出错的风险非常高。我同意这一点,所以答案是忽略列表框本身并专注于它们所代表的内容,因此存储用户想要看到的数据 - 在这种情况下我会使用字段名称 - 所以

ini.WriteString('File To View', 'Name', 'Cars');

和字段

ini.WriteInteger('Cars', 'Count', 2);
ini.WriteString('Cars', 'Field 1', 'Cars_ID');
ini.WriteString('Cars', 'Field 2', 'Car_LICNUM');

我猜你只允许检查第一个复选框中的一个方框。如果那不是真的,或者后来变为不正确,你会添加计数和名称x'像这样的参数

ini.WriteInteger('File To View', 'Count', 2);
ini.WriteString('File To View', 'Name 1', 'Cars');
ini.WriteString('File To View', 'Name 2', 'Users');

因此,以后更改GUI变得简单,使新程序向后兼容也是如此。这是LU RD在您的业务模型上而不是GUI上建立INI文件的重点。

另请注意,您可以存储多个部分 - 实际上每个部分对应一个部分,但这并不重要,并且具有INI文件记忆的隐藏优势。用户最后选择每个文件的字段。