0

基本上,我只是想知道是否可以禁用水平滚动,同时在 VB.NET 中使用列表视图启用垂直滚动,而无需为其创建新类。

为什么?好吧,纯粹是美学,我的列表视图目前有一点水平滚动,这不值得为此努力创建一个新类,尽管如果它可以不费力地编码,我会非常愿意这样做。

PS:我在 Windows 窗体中工作

4

1 回答 1

3

我经常在具有单个列的详细信息视图中使用 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 事件被触发并调整列的宽度,使其完全填满客户区。

于 2016-11-05T16:43:10.383 回答