ListView无法添加Items和SubItems

时间:2017-01-29 20:16:33

标签: listview delphi-7 items

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

例如:

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

在我爆炸后,我有:

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

我想在ListView中添加一个新项目,其中' A'是标题和' B'和' C'是SubItems。

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

然后对整个字符串继续这样做,即使它在分解数据中有数百万个子字符串。

每三个子字符串都是一个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

请告诉我正确的代码。

1 个答案:

答案 0 :(得分: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中显示数千/数百万项的效果会更好(当设置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; 事件仅为其请求的项提供字符串,例如:

public override void ViewDidLoad()
{
set.Bind(Photo1Button).To(vm => vm.EditPhotoCommand).WithConversion(new MvxCommandParameterValueConverter(), 1).OneWay();
            set.Bind(Photo2Button).To(vm => vm.EditPhotoCommand).WithConversion(new MvxCommandParameterValueConverter(), 2).OneWay();
            set.Bind(Photo3Button).To(vm => vm.EditPhotoCommand).WithConversion(new MvxCommandParameterValueConverter(), 3).OneWay();
            set.Bind(Photo4Button).To(vm => vm.EditPhotoCommand).WithConversion(new MvxCommandParameterValueConverter(), 4).OneWay();

}

public override void ViewWillAppear(bool animated)
{

base.ViewWillAppear(animated);
ViewModel.ReloadViewCommand.Execute(null);
}