从 ini 文件中读取多个值到 TCombobox

Read mutiple values from ini file into TCombobox

我有一个包含以下内容的 ini 文件:

[Colours]
1 = Red
2 = Blue
3 = Green
4 = Yellow

在我的应用程序中,我有一个 TComboBox,我想用 ini 文件中的颜色填充它。

有人知道我会怎么做吗?

谢谢,

您可以使用 TIniFile.ReadSection() 获取部分中的名称列表,然后迭代获取值:

procedure TForm1.LoadFile(const AFilename: String);
var
  I: TIniFile;
  L: TStringList;
  X: Integer;
  N: String;
  V: String;
begin
  I:= TIniFile.Create(AFilename);
  try
    L:= TStringList.Create;
    try
      ComboBox1.Items.Clear;
      I.ReadSection('Colours', L);
      for X := 0 to L.Count-1 do begin
        N:= L[X]; //The Name
        V:= I.ReadString('Colours', N, ''); //The Value
        ComboBox1.Items.Add(V);
      end;
    finally
      L.Free;
    end;
  finally
    I.Free;
  end;
end;

作为替代方案,您还可以将部分中的 name/value 对转储到单个 TStringList 中,并使用字符串列表的内置功能读取每个值...

procedure TForm1.LoadFile(const AFilename: String);
var
  I: TIniFile;
  L: TStringList;
  X: Integer;
  N: String;
  V: String;
begin
  I:= TIniFile.Create(AFilename);
  try
    L:= TStringList.Create;
    try
      ComboBox1.Items.Clear;
      I.ReadSectionValues('Colours', L);
      for X := 0 to L.Count-1 do begin
        N:= L.Names[X]; //The Name
        V:= L.Values[N]; //The Value
        ComboBox1.Items.Add(V);
      end;
    finally
      L.Free;
    end;
  finally
    I.Free;
  end;
end;

附带说明一下,Ini 文件在 = 符号的两边都没有 space,当然除非您希望 space 作为实际名称或值的一部分。

试试这个,不要读取文件两次:

uses IniFiles;

procedure TForm1.Button1Click(Sender: TObject);
var
  lIni : TIniFile;
  i: Integer;
begin
  lIni := TIniFile.Create('c:\MyFile.ini');
  try
    lIni.ReadSectionValues('Colours', ComboBox1.Items);
    for i := 0 to ComboBox1.Items.Count - 1 do
      ComboBox1.Items[i] := ComboBox1.Items.ValueFromIndex[i];
  finally
    FreeAndNil(lIni);
  end;
end;