关于listview控件中查找已经存在的listitem的问题

seabird125 2004-06-24 04:31:23
可以用finditem方法进行查找,找到后用ensurevisible使该item可见。
那么如何能使这个item始终处于那一页的页顶呢??
就如msdn一样,用索引搜索某一信息时,底下listview控件总是把搜到的信息
放到该页的第一行.
我方法用遍了包括API,都找不到方法,请高手帮助
...全文
104 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
seabird125 2004-06-25
  • 打赏
  • 举报
回复
实在感谢上面的朋友,我对程序做了些修改,就可以了

v=(ListView1.ListItems(index).Top - ListView1.Top) / ListView1.GetFirstVisible.Height
另外用LockWindowUpdate来解决滚动条自我滚动时产生的闪烁。
就可以做到和msdn一样的效果了。
leolan 2004-06-24
  • 打赏
  • 举报
回复
Option Explicit

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const SB_LINEDOWN As Long = 1
Private Const WM_VSCROLL As Long = &H115

Private Sub Command1_Click()
Dim itemX As ListItem

Set itemX = ListView1.FindItem(Text1.Text, , , lvwPartial)

If Not itemX Is Nothing Then

itemX.Selected = True
itemX.EnsureVisible
Call SetTopIndex(itemX.index)
End If

End Sub

Private Sub Form_Load()
Dim i As Integer

For i = 0 To 50
ListView1.ListItems.Add , , i & " item"
Next
End Sub

Private Sub SetTopIndex(ByVal index As Long)
Dim i As Long
Dim v As Long

v = (ListView1.ListItems(index).Top - ListView1.Top) / ListView1.ListItems(1).Height
For i = 1 To v
Call SendMessage(ListView1.hwnd, WM_VSCROLL, SB_LINEDOWN, ByVal 0&)
Next
End Sub
seabird125 2004-06-24
  • 打赏
  • 举报
回复
还没有人来吗?急死我了

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧