基本上,我只是想知道是否可以禁用水平滚动,同时在 VB.NET 中使用列表视图启用垂直滚动,而无需为其创建新类。
为什么?好吧,纯粹是美学,我的列表视图目前有一点水平滚动,这不值得为此努力创建一个新类,尽管如果它可以不费力地编码,我会非常愿意这样做。
PS:我在 Windows 窗体中工作
我经常在具有单个列的详细信息视图中使用 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 事件被触发并调整列的宽度,使其完全填满客户区。