VB 中如何给listview控件定义或设置垂直滚动条(水平滚动条不要)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB 中如何给listview控件定义或设置垂直滚动条(水平滚动条不要)相关的知识,希望对你有一定的参考价值。
VB 中如何给listview控件定义或设置垂直滚动条(水平滚动条不要),以便把listview.subitems的所有数据都能通过拉动鼠标滚轮翻阅
参考技术A VB自身好象没有办法,除非使用API,但很麻烦.还是装个鼠标驱动就可以了,我用的是罗技的无线光电鼠,开始也不能这些控件,后来装一个它的驱动后,连VB的代码页也能翻阅了 参考技术B 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 WM_VSCROLL = &H115
Private Sub Command1_Click()
Call ItemToTop(ListView1.hwnd, 30)
End Sub
Private Sub Form_Load()
Dim i As Long
For i = 1 To 100
ListView1.AddItem "List Item Of Line:" & i
Next i
End Sub
Private Sub ItemToTop(ByVal hwnd As Long, ByVal LineNum As Long)
'本子程序使LineNum行滚到第一行
Dim i As Long
SendMessage hwnd, WM_VSCROLL, 6, 0 '复原
For i = 1 To LineNum - 1
SendMessage hwnd, WM_VSCROLL, 1, 0 '下滚一行
Next i
End Sub本回答被提问者采纳 参考技术C 这个listview控件本身不就有吗,注意别吧“平面滚动条”选上,也就是flatscrollbar必须是false。 至于水平的滚动条,伱列数不超出范围它自然不会出现。
如何确定 VB.NET ListView 是不是正在向用户显示垂直滚动条
【中文标题】如何确定 VB.NET ListView 是不是正在向用户显示垂直滚动条【英文标题】:How can I determine if a VB.NET ListView is displaying vertical scrollbar to user如何确定 VB.NET ListView 是否正在向用户显示垂直滚动条 【发布时间】:2014-08-21 01:51:18 【问题描述】:我觉得这应该很简单,但我似乎不知道如何做到这一点。
我有一个列表视图控件,我希望能够确定是否向用户显示垂直滚动条。
我已经尝试了以下链接中的解决方案:
http://www.pcreview.co.uk/forums/detect-presence-listview-scrollbar-t1321101.html
http://support.microsoft.com/KB/299686
我没有运气。我正在使用 VB.NET
如果有人有任何想法,我将不胜感激。
【问题讨论】:
【参考方案1】:这是 MSDN 答案的 NET 更新(如果你看的话,那是 VB6 相关的):
'Pinvokes - these are usually Shared methods in a
' Win32NativeMethods class you accumulate
Private Const GWL_STYLE As Integer = -16
Private Const WS_HSCROLL = &H100000
Private Const WS_VSCROLL = &H200000
<DllImport("user32.dll", SetLastError:=True)> _
private Shared Function GetWindowLong(ByVal hWnd As IntPtr,
ByVal nIndex As Integer) As Integer
End Function
' sometimes you use wrappers since many, many, many things could call
' SendMessage and so that your code doesnt need to know all the MSG params
Friend Shared Function IsVScrollVisible(ByVal ctl As Control) As Boolean
Dim wndStyle As Integer = GetWindowLong(ctl.Handle, GWL_STYLE)
Return ((wndStyle And WS_VSCROLL) <> 0)
End Function
' to be complete:
Friend Shared Function IsHScrollVisible(ByVal ctl As Control) As Boolean
Dim wndStyle As Integer = GetWindowLong(ctl.Handle, GWL_STYLE)
Return ((wndStyle And WS_HSCROLL) <> 0)
End Function
在其他地方,订阅 ClientSizeChanged 事件:
Private VScrollVis As Boolean = False
Private Sub lv_ClientSizeChanged(sender As Object, e As EventArgs)
Handles myListView.ClientSizeChanged
VScrollVis = IsVScrollVisible(Me)
MyBase.OnClientSizeChanged(e)
End Sub
你没有表明你想对此做什么。您可以在 VScrollVis 更改时引发一个新事件,或者您可以编写代码来“修复”控件,如果 HScroll 出现仅仅是因为 VScroll 现在是可见的。
我只想调用一个函数并让它在滚动条可见时返回 true
' expose PInvoke if needed, convert to non-Shared
Public Function IsVerticalScrollVisible(ctl As Control)
Return IsVScrollVisible(ctl)
End Function
Public Function IsHorizontalScrollVisible(ctl As Control)
Return IsHScrollVisible(ctl)
End Function
【讨论】:
我只是希望能够调用一个函数,如果滚动条可见则返回 true,否则返回 false。 然后创建一个从IsVScrollVisible
返回值的函数
我就是这么做的。非常感谢你。【参考方案2】:
试试这个代码,所有的.net,只有一个 1 行函数。
Private Function IsVerticalScrollVisible(ByVal lst As ListView) As Boolean
If lst.Items.Count > 0 Then _
If (lst.Items(0).Bounds.Top - lst.TopItem.Bounds.Top < 0) Or _
(lst.Items(lst.Items.Count - 1).Bounds.Bottom > lst.ClientSize.Height) _
Then Return True
End Function
【讨论】:
以上是关于VB 中如何给listview控件定义或设置垂直滚动条(水平滚动条不要)的主要内容,如果未能解决你的问题,请参考以下文章
如何确定 VB.NET ListView 是不是正在向用户显示垂直滚动条