是否有一種通用的方法將listview右邊的特定項目(例如從1000開始的500)放置在其中心?現在我正在使用這個代碼:如何讓listview在中心顯示特定的項目?
lvData.Items[iIndex].MakeVisible(False);
它很簡單,但有一個缺陷 - 主要是所需的項目出現在列表視圖的頂部或底部。是的,我知道,手動滾動它並不是一件大事,但我使用它的方式(選擇圖上的一個點並查看列表視圖中的附近點的值)會使此行爲有點不舒服。
是否有一種通用的方法將listview右邊的特定項目(例如從1000開始的500)放置在其中心?現在我正在使用這個代碼:如何讓listview在中心顯示特定的項目?
lvData.Items[iIndex].MakeVisible(False);
它很簡單,但有一個缺陷 - 主要是所需的項目出現在列表視圖的頂部或底部。是的,我知道,手動滾動它並不是一件大事,但我使用它的方式(選擇圖上的一個點並查看列表視圖中的附近點的值)會使此行爲有點不舒服。
您可以使用項目的DisplayRect
,以確定它目前的生活。 鑑於ListView1
是列表視圖,li
是列表項和R
是TRect
可變
R := li.DisplayRect(drBounds);
ListView1.Scroll(0, R.Top - ListView1.ClientHeight div 2);
將在中心滾動項目,只要有足夠的物品。
此代碼完美工作 – Molochnik
只是想提供一個想法。 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);
代碼在稍作改動後效果很好,謝謝! – Molochnik
使用'TListView.TopItem'來查看是否要向上或向下滾動。 'TlistView.Scroll'滾動一定數量的像素。 –
@LU如果這個項目總是出現在同一個位置,那麼它就是一種工作方法,但它不會,它可以顯示在任何地方。 – Molochnik
@LU對不起,前一個回答對您未經修改的問題 – Molochnik