【问题标题】:ListView trouble adding Items and SubItemsListView 添加项目和子项目时遇到问题
【发布时间】:2017-01-29 20:16:32
【问题描述】:

我想在ListView中添加一些字符串,但是不知道字符串可以多长。

例如:

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

在我爆炸字符串后,我有:

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

我想向 ListView 添加一个新项目,其中“A”是标题,“B”和“C”是子项目。

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

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

每三个子字符串就是一个ListView项,直到字符串用完为止。

我不知道该怎么做,这就是我在这里问的原因。我想做的就是这样的图片:

我需要这样的代码:

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

请告诉我执行此操作的正确代码。

【问题讨论】:

  • 所以继续写代码吧。是什么阻止了你。
  • 好吧,我不知道主人要这样做,这就是为什么我问她,所以我想在图片中做什么s24.postimg.org/cry3s6hs5/Captussssssssre.png 然后 ListView1.Items.Add; ListView1.Caption:= StrArr[0];第一本书的 ID SubItems.Add(StrArr[1]); //它的标题 SubItems.Add(StrArr[2]); // 它的编辑器 SubItems.Add(StrArr[3]);书号的id tow SubItems.Add(StrArr[4]); //它的标题 SubItems.Add(StrArr[5]); // 它的编辑器 SubItems.Add(StrArr[6]); ///否则对于其他书籍直到未知的SubItems.Add(StrArr[100000000]);
  • 这不是我们来这里的目的。阅读help center

标签: listview delphi-7 items


【解决方案1】:

使用循环,例如:

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;

【讨论】:

  • 非常感谢。您的回答非常有帮助。问题已解决
猜你喜欢
  • 2021-07-27
  • 2020-06-08
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多