在窗體上放置一個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