2010-12-17 508 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