2013-03-23 103 views
0

基本上,我只是想知道是否可以禁用水平滾動,同時在VB.NET中使用listview啓用垂直滾動而無需爲其創建新類。是否可以在列表視圖中單獨禁用水平滾動?

爲什麼?那麼,純粹的美學,我的列表視圖目前有一個小小的水平滾動,這並不值得爲此創建一個新類,儘管如果它可以被編碼沒有太多的努力,我會更願意這樣做。

PS:我在Windows工作表單

+1

不,這並不簡單,重寫WndProc是必需的。 – 2013-03-23 03:24:43

+0

切換到WPF或Silverlight以獲得對UI的全面控制。 – OneFineDay 2013-03-23 03:39:25

+0

感謝Hans Passant,我會@DonA,但我只是覺得使用普通的winforms而不是WPF更舒服,我不知道爲什麼,我只是這樣做,我不得不在過去創建一些WPF項目,但是我看起來像一個完全不同的環境 – Yorrick 2013-03-23 23:03:54

回答

2

我經常使用的ListView控件詳細信息視圖與單個列,以提供具有拖放和拖放功能,這是缺乏ListBox控件列表。除了想要水平滾動的討厭習慣之外,ListView的工作原理非常漂亮。可以通過將列寬設置爲合適的值(通常比ListView的寬度小4)來解決這個問題,但如果外觀變化並且在控件決定時完全失敗在運行時添加一個垂直滾動條。

我使用的解決方法(我承認它不能適應所有情況)是這樣的。首先,配置一個ListView與單個列(任意名稱),並隱藏其頭:

lvList.View = View.Details 
lvList.FullRowSelect = True 
lvList.Columns.Add("ColName") 
lvList.Columns(0).Width = lvList.ClientSize.Width 
lvList.HeaderStyle = ColumnHeaderStyle.None 

然後處理ListView的ClientSizeChanged事件,並用它來列的寬度設置爲客戶區的寬度(這是基本上列表本體具有填充的區域):

Private Sub lvList_ClientSizeChanged(ByVal sender As Object, ByVal e As EventArgs) _ 
Handles lvList.ClientSizeChanged 
    If lvList.Columns.Count > 0 Then 
     lvList.Columns(0).Width = lvList.ClientSize.Width 
    End If 
End Sub 

作爲列表的內容改變和垂直滾動條被添加或移除時,ClientSizeChange事件被觸發並調整列的寬度,以便它完全填充客戶區。