如何防止listview在item.count更改时跳转到选定/关注的行?
我有一个虚拟的listview,我计划用它来显示一个相当大的日志文件中的内容 无论何时添加或删除一行,并且我在列表框中选择或聚焦了一行(或两者),它都会自动回滚到该行,这非常烦人 在修改项目计数时,感觉好像有什么东西在调用MakeVisible(或做相同事情的东西) 复制它的非常简单的示例:如何防止listview在item.count更改时跳转到选定/关注的行?,listview,delphi,vcl,delphi-10.2-tokyo,Listview,Delphi,Vcl,Delphi 10.2 Tokyo,我有一个虚拟的listview,我计划用它来显示一个相当大的日志文件中的内容 无论何时添加或删除一行,并且我在列表框中选择或聚焦了一行(或两者),它都会自动回滚到该行,这非常烦人 在修改项目计数时,感觉好像有什么东西在调用MakeVisible(或做相同事情的东西) 复制它的非常简单的示例: procedure TForm1.FormCreate(Sender: TObject); var Col: TListColumn; begin ListView1.OwnerData := Tr
procedure TForm1.FormCreate(Sender: TObject);
var
Col: TListColumn;
begin
ListView1.OwnerData := True;
ListView1.ViewStyle := vsReport;
ListView1.RowSelect := True;
Col := ListView1.Columns.Add;
Col.Caption := 'LineNum';
Col.Alignment := taLeftJustify;
Col.Width := 70;
end;
// listview onData event
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
Item.Caption := IntToStr(Item.Index+1);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ListView1.Items.Count := ListView1.Items.Count + 10;
end;
编辑:测试不同的视图样式,这仅在vsReport和vsList中发生。问题是
TListItems.Count
属性设置程序调用时没有LVSICF\u NOSCROLL
标志:
项目计数更改时,列表视图控件不会更改滚动位置
哪个Delphi版本?VCL或FMX?可能是VCL,因为使用列表包括VCL。什么,它是10.2 Tokyove非常感谢,这完全解决了问题,我实际上已经在查看头文件,但没有找到标志。
procedure TListItems.SetCount(Value: Integer);
begin
if Value <> 0 then
ListView_SetItemCountEx(Handle, Value, LVSICF_NOINVALIDATEALL)
else
ListView_SetItemCountEx(Handle, Value, 0);
end;
uses
..., CommCtrl;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//ListView1.Items.Count := ListView1.Items.Count + 10;
ListView_SetItemCountEx(ListView1.Handle, ListView1.Items.Count + 10, LVSICF_NOINVALIDATEALL or LVSICF_NOSCROLL);
end;