我想在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项,直到字符串用完为止。
我不知道该怎么做,这就是我在这里问的原因。我想做的就是这张照片:
我需要类似这样的代码:
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)
使用循环,例如:
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);
}