有没有办法可以阻止水平滚动条显示在列表视图中?我希望垂直滚动条在需要时显示,但我希望水平滚动条永远不会显示。
我想这会与WndProc有关吗?
由于
答案 0 :(得分:9)
有一种更简单的方法可以消除下滚动条并具有垂直显示。它包括确定标题,如果没有标题,则行是listview.Width - 4
的宽度,如果显示垂直滚动条,则listview.Width - Scrollbar.Width - 4;
以下代码阐述了如何:
lv.Columns[0].Width = Width - 4 - SystemInformation.VerticalScrollBarWidth;
答案 1 :(得分:6)
@ bennyyboi的回答是不安全的,因为它会使堆栈失衡。您应该使用以下代码代替DllImport:
[System.Runtime.InteropServices.DllImport("user32", CallingConvention=System.Runtime.InteropServices.CallingConvention.Winapi)]
[return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
private static extern bool ShowScrollBar(IntPtr hwnd, int wBar, [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)] bool bShow);
Andreas Reiff在重新审视之后在上面的评论中介绍了这一点,所以我想这里的格式很好。
答案 2 :(得分:4)
你可以尝试这样的东西,我在一个项目中使用过一次就可以了:
[DllImport ("user32")]
private static extern long ShowScrollBar (long hwnd , long wBar, long bShow);
long SB_HORZ = 0;
long SB_VERT = 1;
long SB_BOTH = 3;
private void HideHorizontalScrollBar ()
{
ShowScrollBar(listView1.Handle.ToInt64(), SB_HORZ, 0);
}
希望它有所帮助。
答案 3 :(得分:1)
最佳解决方案是此处提供的接受答案:How to hide the vertical scroll bar in a .NET ListView Control in Details mode
它完美无缺,您不需要像列宽调整那样的技巧。此外,在创建控件时右键禁用滚动条。
缺点是您必须创建自己的列表视图类,该类派生自System.Windows.Forms.ListView
以覆盖WndProc
。但这是要走的路。
要停用水平滚动条,请记住使用WS_HSCROLL
代替WS_VSCROLL
(在链接的答案中使用)。 WS_HSCROLL
的值为0x00100000
。