如何使listview显示中心的特定项目?

时间:2015-04-14 13:13:34

标签: delphi listview

是否有一种通用的方法可以将列表视图中的特定项目(例如1000中的500)放在其中心?现在我正在使用此代码:

lvData.Items[iIndex].MakeVisible(False);

它很简单,但有一个缺陷 - 大部分所需的项目出现在列表视图的顶部或底部。是的我知道,手动滚动它并不是什么大问题,但我使用它的方式(在图表上选择一个点并查看列表视图中附近点的值)会使这种行为有点不舒服。 / p>

2 个答案:

答案 0 :(得分:10)

您可以使用某个项目的DisplayRect来确定其当前所在的位置。 鉴于ListView1是列表视图,li是列表项,RTRect变量

R := li.DisplayRect(drBounds);
ListView1.Scroll(0, R.Top - ListView1.ClientHeight div 2);
如果有足够的项目,

将滚动中心的项目。

答案 1 :(得分:3)

只是想一个主意。 TopItem提供了视图中最顶层的项目,VisibleRowCount给出了有多少可见行。要完成此操作,请对新索引进行健全性检查。

if (lvData.TopItem < iIndex) then
  adjustedIndex := iIndex-(lvData.VisibleRowCount div 2)   
else
  adjustedIndex := iIndex+(lvData.VisibleRowCount div 2);
// Check adjustedIndex
if (adjustedIndex < 0) then
  adjustedIndex := 0;
if (adjustedIndex >= lvData.Items.Count) then
  adjustedIndex := lvData.Items.Count-1;

lvData.Items[adjustedIndex].MakeVisible(false);