2010-12-17 506 views
7

有没有办法阻止水平滚动条在列表视图中出现?我希望在需要时显示垂直滚动条,但我希望水平滚动条不显示。C#ListView禁用水平滚动条

我会想象它会与WndProc有什么关系?

感谢

回答

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); 
} 

希望它能帮助。

+1

嗨,你可以解释一下,或者你能告诉我如何在所有这些直接窗口API调用 – swordfish 2011-05-20 03:16:44

+1

而不是'长hwnd'你可以使用'IntPtr hwnd'作为P/Invoke的第一个参数方法。 – 2012-06-27 09:56:02

+0

其次,对于P/Invokes,alsways也可以看成pinvoke。 :) http://www.pinvoke.net/default.aspx/user32/ShowScrollBar.html给出签名[DllImport(“user32.dll”)] [return:MarshalAs(UnmanagedType.Bool)] public static extern bool ShowScrollBar (IntPtr hWnd,int wBar,[MarshalAs(UnmanagedType.Bool)] bool bShow); 唯一的问题(我认为)是Uwe已经提到的IntPtr。 – 2012-07-04 13:25:59

4

@ 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); 

安德烈亚斯Reiff包括这上面再寻找后,他的评论,所以我想这一切很好地格式化。

6

有一个更简单的方法来消除下滚动条,并有垂直显示。它由确保报头,并且如果没有标题的行是listview.Width - 4的宽度并且如果垂直滚动条显示然后listview.Width - Scrollbar.Width - 4;

以下代码演示功能如何:

lv.Columns[0].Width = Width - 4 - SystemInformation.VerticalScrollBarWidth; 
+0

这确实比选定的答案更干净,而且实际上是问题的根本原因。 ListView的列需要更小。感谢那个提示,它为我工作。 – Tobias 2015-09-16 14:35:26

+0

这很简单,它的工作原理!做得好! – NothinRandom 2015-10-15 16:48:10

+0

我不认为这将工作,如果您使用复选框行。另外我不认为固定值是好的,因为其他窗口设计可能会使用不同的尺寸。最后但并非最不重要的是,这不是一个更清洁的方法。如果你不想要一个滚动条,你应该隐藏/禁用它,而不是调整其他的东西,这样就不会显示。我不喜欢p/Invoke解决方案,但它仍然是比列宽调整更好的方法。 – 2016-10-19 14:03:32

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