C#ListView禁用水平滚动条

时间:2010-12-17 01:37:51

标签: c# winforms horizontal-scrolling wndproc

有没有办法可以阻止水平滚动条显示在列表视图中?我希望垂直滚动条在需要时显示,但我希望水平滚动条永远不会显示。

我想这会与WndProc有关吗?

由于

4 个答案:

答案 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