我有一个ListView设置为vsIcon。每个项目都是下面带有小文本的图像。当我添加许多项目时,它们被包装为ListView的宽度(例如一行中的5个项目)。但是当我改变它的宽度时,它们不再被包裹在新的宽度上。
到目前为止我尝试了什么:
我没有尝试对项目进行排序,因为我不希望它们被排序。但是大部分时间它们都被排序,所以排序不会有太大帮助(如果它将包装它们,我不相信它会)。
我现在用的是:
procedure TForm.WMExitSizeMove(var Message: TMessage);
var
i, p: Integer;
ListItem: TListItem;
c: array of string;
b: array of Boolean;
begin
if Showing and (PreviousWidth <> Width) then
begin
p := ListView.ItemIndex;
SetLength(c, ImageList.Count);
SetLength(b, ImageList.Count);
for i := 0 to ImageList.Count - 1 do
begin
c[i] := ListView.Items[i].Caption;
b[i] := ListView.Items[i].Selected;
end;
ListView.Items.BeginUpdate;
ListView.Clear;
for i := 0 to ImageList.Count - 1 do
begin
ListItem := ListView.Items.Add;
ListItem.Caption := c[i];
ListItem.ImageIndex := i;
ListItem.Selected := b[i];
end;
ListView.ItemIndex := p;
ListView.Items.EndUpdate;
SetLength(c, 0);
SetLength(b, 0);
PreviousWidth := Width;
end;
inherited;
end;
但是,正如您所注意到的那样,对于大量物品来说并不是那么快。你能帮我找一个更好的方法......?
谢谢。
我使用的是Delphi 7。
列表视图可以自动为您完成。在代码中的某处(可能在formcreate中)插入以下内容:
listview.IconOptions.AutoArrange := true;
或者您也可以在属性窗口中进行设置。