Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定ListView是否已在其上显示';s自己的和默认的垂直滚动条?_C#_.net_Vb.net_Winforms_Listview - Fatal编程技术网

C# 确定ListView是否已在其上显示';s自己的和默认的垂直滚动条?

C# 确定ListView是否已在其上显示';s自己的和默认的垂直滚动条?,c#,.net,vb.net,winforms,listview,C#,.net,Vb.net,Winforms,Listview,我需要在我的控件中确定它是否已显示为集成的默认垂直滚动条,我标记默认部分,因为我看到的所有解决方案都是针对使用自定义VScrolls的继承用户控件,但实际上,我并不是假装弄乱了一个定制的VScrollbar,只是为了确定一个值,该值指示它在客户端区域内的压力 我已经尝试过了,但至少在使用默认滚动条的Listview上没有效果,我的意思是即使垂直滚动条存在,控件集合也始终为零 我也试过了,但这似乎对ListView不起作用,因为它无法将ListView识别为一个ScrollableControl,

我需要在我的控件中确定它是否已显示为集成的默认
垂直滚动条
,我标记默认部分,因为我看到的所有解决方案都是针对使用自定义VScrolls的继承用户控件,但实际上,我并不是假装弄乱了一个定制的VScrollbar,只是为了确定一个值,该值指示它在客户端区域内的压力

我已经尝试过了,但至少在使用默认滚动条的Listview上没有效果,我的意思是即使垂直滚动条存在,控件集合也始终为零

我也试过了,但这似乎对ListView不起作用,因为它无法将ListView识别为一个
ScrollableControl
,太奇怪了

注意:我的Listview的大小不是静态的,我的意思是我已经指定了锚点属性,因此当窗体调整大小时,Listview会一起调整大小,然后我还认为使用算术公式测量所有列的宽度等来确定滚动条的压力可能不是一种有效的方法(我不知道是否可以)


注2:如果需要确定这一点,我可以继承ListView控件,但正如我所说,我希望避免使用自定义VScroll,我不需要它,这将引发我想要避免的其他问题,因为我没有使用自定义滚动条的经验。

您可以在任何给定时间检查c通过调用和/或,控件有一个
WS_VSCROLL
WS_HSCROLL

'Private Const WS\u VSCROLL As Integer=&H200000
'Private Const WS_HSCROLL As Integer=&H100000
'Private Const GWL_STYLE As Integer=-16
_
私有共享函数GetWindowLong32(ByVal hWnd作为HandleRef,ByVal nIndex作为整数)作为IntPtr
端函数
_
私有共享函数GetWindowLong64(ByVal hWnd作为HandleRef,ByVal nIndex作为整数)作为IntPtr
端函数
公共共享函数GetScrollbars(ctl作为控件)作为滚动条
如果(ctl为Nothing),则抛出新的ArgumentNullException(“ctl”)
水平调暗为布尔值=False
垂直调暗为布尔值=False
如果(IntPtr.Size=4),则
作为整数的Dim样式=GetWindowLong32(新HandleRef(ctl,ctl.Handle),-16I).ToInt32()
水平=((样式和&H100000I)=&H100000I)
垂直=((样式和&H200000I)=&H200000I)
其他的
Dim样式为Long=GetWindowLong64(新HandleRef(ctl,ctl.Handle),-16I).ToInt64()
水平=((样式和&H100000L)=&H100000L)
垂直=((样式和H200000L)=&H200000L)
如果结束
如果(水平和同样垂直),则
返回滚动条。两者都有
ElseIf(水平)然后
返回滚动条。水平
埃尔塞夫(垂直)那么
返回滚动条。垂直
如果结束
返回滚动条。无
端函数

MSDN说我们应该使用GetWindowLongPtr来获得x86/x64的兼容性,但人们已经将其标记为“重复”因此,我无法为其他人提供实际且有文档记录的解决方案。@ElektroStudios您完全正确,这是更好的选择。我已更新了答案以包含64位支持。注意到这一点,我将给您+1。非常感谢您的帮助