【问题标题】:Delphi TListview - search for item and auto-scroll to that itemDelphi TListview - 搜索项目并自动滚动到该项目
【发布时间】:2021-03-25 16:07:02
【问题描述】:

带有 FireMonkey 的 Delphi 10.4.1。

我在TListView 上有 50 个项目,ID 从 1 到 50。这里没有发布代码,因为我什至不知道从哪里开始。

如果我搜索了 ID=35,有没有办法让 TListView 以编程方式精确移动到该项目的位置 以便项目处于全视图中?

【问题讨论】:

  • 是的。有办法做到这一点。如果您在尝试执行此操作时遇到特定问题。包括您目前获得的代码。否则这个问题太宽泛了,无法回答。
  • VCL 的TListItem 有一个MakeVisible() 方法用于此目的。可惜FireMonkey的TListViewItem没有类似的方法。
  • @Ancaron 道歉,但我使用了 TDataset.Locate 因为它是实时绑定的,但它根本没有移动(甚至没有移动到错误的位置)所以我没有包含它。
  • @RemyLebeau 啊,感谢您的指点……对未来的 Windows 应用程序很有用。

标签: android ios delphi firemonkey tlistview


【解决方案1】:

这很简单:

ListView.ScrollTo(Item.Index);

【讨论】:

  • 感谢指点!经测试,这行得通!赞成答案。
【解决方案2】:

简而言之:设置SelectedItem,列表视图滚动到列表中的这个元素。

长篇大论:您可以遍历列表并选择与您的搜索条件匹配的项目:

for var c := 0 to ListView1.ItemCount - 1 do
  if ListView1.Items[c].Text = <TextToSearch> then
  begin
    ListView1.Selected := ListView1.Items[c]; 
    break;
  end;

很遗憾,您没有说明如何将 ID 保存在列表项中。我的示例假定这是在列表文本中完成的。或者,您也可以使用例如TagTagString

【讨论】:

  • 对丢失的信息表示歉意。我将 ID 存储在一个名为 TextID 的 TListItemText 对象中,因为它是一个 DynamicAppearance 列表视图。如何遍历 TextID 的每一行?
  • 您可能还希望将 SelectedItem 更改为 Selected for Firemonkey。
  • 感谢指点!经测试,这行得通!赞成答案。
  • 正确,我已更改为已选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多