从 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;
我有一个包含以下内容的 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;