2017-01-29 39 views
-1

我想添加一些字符串到一个ListView,但我不知道字符串可以多久。ListView麻烦添加项目和子项目

例如:

mystring := 'a'+|+'b'+|+ 'c'+|+ 'd'+|+ 'e'+|+ 'f'+|+ ....... '1000 of mystr'; 

我炸串后,我有:

'a' 
'b' 
'c' 
. 
. 
. 
'1000ofmystr' 

我想一个新的项目添加到ListView其中 'A' 是标题和“B '和'C'是子项目。

然后添加一个新项目,其中'D'是标题,'E'和'F'是子项目。

然后继续像这样整个字符串,即使它在爆炸数据中有数百万个子字符串。

每三个子字符串都是一个ListView项目,直到字符串耗尽。

我不知道如何做到这一点,这就是为什么我在这里问。我想要做的是这样的画面:

image

我需要的东西,这样的代码:

ListView1.Items.Add; 
ListView1.Caption:= StrArr[0]; // id of the book number one 
SubItems.Add(StrArr[1]); //its title 
SubItems.Add(StrArr[2]); // its editor 
ListView1.Items.Add; 
ListView1.Caption:= StrArr[3]; // id of the book number two 
SubItems.Add(StrArr[4]);  //its title 
SubItems.Add(StrArr[5]); // its editor 
ListView1.Items.Add; 
ListView1.Caption:= StrArr[6]; // id of the book number three 
// and so on for other books for an unknown number of strings 

请告诉我正确的代码来做到这一点。

+0

所以,尽管写的代码。什么阻止了你。 –

+0

好吧我不知道主人做那就是那为什么我问他这样我想在图片中做什么https://s24.postimg.org/cry3s6hs5/Captussssssssre.png然后ListView1.Items.Add; ListView1.Caption:= StrArr [0];书号1 SubItems.Add(StrArr [1]); //其标题 SubItems.Add(StrArr [2]); //其编辑器 SubItems.Add(StrArr [3]);书号拖曳的编号 SubItems.Add(StrArr [4]); //其标题 SubItems.Add(StrArr [5]); //其编辑器 SubItems.Add(StrArr [6]); ///和其他书籍 UNTIL UNCKONOWN SubItems.Add(StrArr [100000000]); – Mario

+0

这不是我们在这里。阅读[help] –

回答

0

使用一个循环,例如:

var 
    Item: TListItem: 
    i: Item; 

for i := 0 to NumberOfStrings-1 do 
begin 
    if (i mod 3) = 0 then 
    begin 
    Item := ListView1.Items.Add; 
    Item.Caption := StrArr[i]; 
    end else 
    Item.SubItems.Add(StrArr[i]); 
end; 

做笔记,但是,在TListView显示数千/数百万的项目更好地工作,如果你在虚拟模式代替(使用它时,它的OwnerData属性设置为true)。其Items.Count属性设置为要显示的项目数,然后利用其OnData事件只有它要求的项目,如提供字符串:

var 
    NewCount: Integer; 

NewCount := NumberOfStrings div 3; 
if (NumberOfStrings mod 3) <> 0 then 
    Inc(NewCount); 
ListView1.Items.Count := NewCount; 

... 

procedure TMyForm.ListView1Data(Sender: TObject; Item: TListItem); 
var 
    Index: Integer; 
begin 
    Index := Item.Index * 3; 
    Item.Caption := StrArr[Index]; 
    for Index := Index+1 to Index+2 do 
    begin 
    if Index < NumberOfStrings then 
     Item.SubItems.Add(StrArr[Index]) 
    else 
     Break; 
    end; 
end; 
+0

非常感谢。你的回答非常非常有帮助。问题解决了 – Mario