是否有一种通用的方法可以将列表视图中的特定项目(例如1000中的500)放在其中心?现在我正在使用此代码:
lvData.Items[iIndex].MakeVisible(False);
它很简单,但有一个缺陷 - 大部分所需的项目出现在列表视图的顶部或底部。是的我知道,手动滚动它并不是什么大问题,但我使用它的方式(在图表上选择一个点并查看列表视图中附近点的值)会使这种行为有点不舒服。 / p>
答案 0 :(得分:10)
您可以使用某个项目的DisplayRect
来确定其当前所在的位置。
鉴于ListView1
是列表视图,li
是列表项,R
是TRect
变量
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);