我有一个ListView设置为vsIcon。每个项目都是下面带有小文本的图像。当我添加许多项目时,它们被包装为ListView的宽度(例如一行中的5个项目)。但是当我改变它的宽度时,它们不再被包裹在新的宽度上。
到目前为止我尝试了什么:
ListView.Update;
ListView.Refresh;
ListView.Repaint;
function ListView_Arrange(hwndLV:HWND; Code:UINT):Bool;
function ListView_RedrawItems(hwndLV:HWND; iFirst,iLast:Integer):Bool;
我没有尝试对项目进行排序,因为我不希望对它们进行排序。但是大部分时间它们都被排序,因此排序不会有太大帮助(如果它将包装它们,我认为它不会这样)。
我现在使用的是:
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。
答案 0 :(得分:2)
listview可以自动为您完成。 在代码中的某处(可能在formcreate中)插入以下内容:
listview.IconOptions.AutoArrange := true;
或者你也可以在属性窗口中设置它。