在窗体上放置一个TListView,并将其样式设置为vsList。创建您想要显示的三列(右键单击ListView并从弹出菜单中选择列编辑器)。
以下添加到FormShow()事件(或任何你想它):
procedure TForm1.FormShow(Sender: TObject);
var
SL: TStringList;
i: Integer;
begin
SL := TStringList.Create;
try
SL.LoadFromFile(YourFileNameHere);
i := 0;
while i < SL.Count do
begin
with ListView1.Items.Add do
begin
Caption := SL[i];
SubItems.Add(SL[i + 1]);
SubItems.Add(SL[i + 2]);
end;
Inc(i, 3);
end;
finally
SL.Free;
end;
end;
注意,这里假设你正在寻找的是这样的:
0th member first=XXXXX second=YYYYY
1 first=ZZZZZ second=ZZZZZ
如果你正在寻找的是更喜欢:
0th member XXXXX YYYYY
1 ZZZZZ ZZZZZ
然后更改子项()调用的东西升ike this:
SubItems.Add(Copy(SL[i + 1], Pos('=', SL[i + 1]) + 1, MaxInt);
SubItems.Add(Copy(SL[i + 2], Pos('=', SL[i + 2]) + 1, MaxInt);
这会从两个子列的文本值中提取等号(=)后的部分。
这应该足以让你开始,我想。
请注意,当ViewStyle设置为vsReport并且您没有在IDE中定义任何项目时,Delphi 2010在TListView中存在一个错误。由于未定义的项目,当您尝试运行应用程序时,会出现流读取错误。您可以解决此通过在设计时废话值创建一个虚拟的项目,并在你的FormShow()事件中添加以下内容作为第一个可执行行:
ListView1.Items.Clear;
这得到过去认为DFM是点流入,这是什么触发错误。
编辑:在阅读由OP评论。要跳过空白行:
// To skip entire group if starting line is blank
while i < SL.Count - 1 do
begin
if SL[i] <> '' then
begin
with ListView1.Items.Add do
// just like before
end
Inc(i, 3);
end;
要子项目只跳过空白行:
while i < SL.Count - 1 do
begin
with ListView1.Items.Add do
begin
Caption := SL[i];
if SL[i + 1] <> '' then
SubItems.Add(SL[i + 1]);
if SL[i + 2] <> '' then
SubItems.Add(SL[i + 2];
end;
Inc(i, 3);
end;
谢谢回复,先生,我需要酷似行1标题:XXXXXXXX分项YYYYY000线2标题:XXXXXX11子项目:YYYY11111 ;第3行-----(等),我已经尝试过你的方法先生,它的工作正常,如果所有的数据逐行。在我的文本文件中,所有的数据不会一行一行地输入,然后我在listview中获得空的字段。无论文件中出现多少空行,我都可以获取数据吗?提前致谢 。 – noob 2009-11-04 04:36:56
嗯, 我得到它的工作先生,空行,无论如何感谢您的主意先生。 我很想知道我可以用str.values做到这一点吗? – noob 2009-11-04 06:02:41
对于空格,您可以在添加之前先检查(请参阅我的编辑)。我不确定“str.values”是什么意思? – 2009-11-04 13:37:40