ctlist控件提供了hwnd属性没有?如果提供了这个属性接口,可以用sendmessage给它发送WM_VSCROLL 消息,我这里没有ctlist控件,下面的例子是针对listbox的,你修改以下看看能否使用: Option Explicit Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Const SB_LINEDOWN = 1 Private Const SB_LINEUP = 0 Private Const WM_VSCROLL = &H115Private Sub Command1_Click() '向下滚动一行,如果你的ctlist控件有句柄的话,将List1.hwnd换成他的句柄 SendMessage List1.hwnd, WM_VSCROLL, SB_LINEDOWN, ByVal 0& End SubPrivate Sub Command2_Click() '向上滚动一行,如果你的ctlist控件有句柄的话,将List1.hwnd换成他的句柄 SendMessage List1.hwnd, WM_VSCROLL, SB_LINEUP, ByVal 0& End SubPrivate Sub Form_Load() Dim i As Long For i = 1 To 1000 List1.AddItem "line " + CStr(i) Next End Sub
Private Sub Command1_Click() Dim i As Integer For i = 1 To 10000 List1.AddItem i If i > 10 Then List1.TopIndex = i - 10 Next End Sub
//我的意思是我把鼠标点在那里,它会一直不停的往上走,而不是点一下上去一下如果你想要滚动效果的话,用个timer控件就行了: Option Explicit Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Const SB_LINEDOWN = 1 Private Const SB_LINEUP = 0 Private Const SB_BOTTOM = 7 Private Const SB_TOP = 6 Private Const WM_VSCROLL = &H115 Dim Flag As Long Private Sub Command1_Click() Timer1.Enabled = False '先滚动到顶部 SendMessage List1.hwnd, WM_VSCROLL, SB_TOP, ByVal 0& Timer1.Enabled = True '设置滚动方向为向下 Flag = SB_LINEDOWN End SubPrivate Sub Command2_Click() Timer1.Enabled = False '先滚动到底部 SendMessage List1.hwnd, WM_VSCROLL, SB_BOTTOM, ByVal 0& Timer1.Enabled = True '设置滚动方向为向上 Flag = SB_LINEUP End SubPrivate Sub Form_Load() Dim i As Long For i = 1 To 1000 List1.AddItem "line " + CStr(i) Next Timer1.Enabled = False Timer1.Interval = 20 End Sub Private Sub Timer1_Timer() SendMessage List1.hwnd, WM_VSCROLL, Flag, ByVal 0& End Sub
这样可以吗: sub test() List1.Clear Dim i As Long For i = 1 To 1000 List1.AddItem i List1.ListIndex = List1.NewIndex Next end sub
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const SB_LINEDOWN = 1
Private Const SB_LINEUP = 0
Private Const WM_VSCROLL = &H115Private Sub Command1_Click()
'向下滚动一行,如果你的ctlist控件有句柄的话,将List1.hwnd换成他的句柄
SendMessage List1.hwnd, WM_VSCROLL, SB_LINEDOWN, ByVal 0&
End SubPrivate Sub Command2_Click()
'向上滚动一行,如果你的ctlist控件有句柄的话,将List1.hwnd换成他的句柄
SendMessage List1.hwnd, WM_VSCROLL, SB_LINEUP, ByVal 0&
End SubPrivate Sub Form_Load()
Dim i As Long
For i = 1 To 1000
List1.AddItem "line " + CStr(i)
Next
End Sub
设置ctlist.selectindex=刚加入的index
Dim i As Integer
For i = 1 To 10000
List1.AddItem i
If i > 10 Then List1.TopIndex = i - 10
Next
End Sub
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const SB_LINEDOWN = 1
Private Const SB_LINEUP = 0
Private Const SB_BOTTOM = 7
Private Const SB_TOP = 6
Private Const WM_VSCROLL = &H115
Dim Flag As Long
Private Sub Command1_Click()
Timer1.Enabled = False
'先滚动到顶部
SendMessage List1.hwnd, WM_VSCROLL, SB_TOP, ByVal 0&
Timer1.Enabled = True
'设置滚动方向为向下
Flag = SB_LINEDOWN
End SubPrivate Sub Command2_Click()
Timer1.Enabled = False
'先滚动到底部
SendMessage List1.hwnd, WM_VSCROLL, SB_BOTTOM, ByVal 0&
Timer1.Enabled = True
'设置滚动方向为向上
Flag = SB_LINEUP
End SubPrivate Sub Form_Load()
Dim i As Long
For i = 1 To 1000
List1.AddItem "line " + CStr(i)
Next
Timer1.Enabled = False
Timer1.Interval = 20
End Sub
Private Sub Timer1_Timer()
SendMessage List1.hwnd, WM_VSCROLL, Flag, ByVal 0&
End Sub
sub test()
List1.Clear
Dim i As Long
For i = 1 To 1000
List1.AddItem i
List1.ListIndex = List1.NewIndex
Next
end sub
----------------------------zhuzhugrit.tyvhost.com