我可以在带有水平滚动条的ListView中获得总列宽中的可见列宽吗

本文关键字:滚动条 ListView 我可以 水平 | 更新日期: 2023-09-27 18:25:07

我有一个ListView,其中View为Details&其中一列具有用于编辑每行数据的组合框。

当我调整列的大小时,我在窗体中的ListView中得到了一个水平滚动条;只有向右拖动滚动时,才能看到一半。

我可以用任何方法获得ListView的Visible列宽吗??

Rgards

我可以在带有水平滚动条的ListView中获得总列宽中的可见列宽吗

是的,您可以通过程序遍历listview中的每一列,并获取其宽度。

然后,您可以通过使用每个列的宽度和列表视图本身的宽度来计算列的可见面积。

这是工作代码。我把它留得很简单,以显示步骤。您可以根据自己的使用情况对其进行优化。

        Dim totalWdith As Integer = SOlistview.Width
        Dim combinedColumnWidth As Integer = 0
        Dim visibleSpaceLeft As Integer = 0
        Dim columnCount As Integer = SOlistview.Columns.Count
        Dim weHaveClipping As Boolean = False
        For i = 0 To columnCount - 1
            If combinedColumnWidth + SOlistview.Columns(i).Width > totalWdith Then
                '//we will have clipping occur if we add this column...
                visibleSpaceLeft = SOlistview.Width - combinedColumnWidth
                weHaveClipping = True
                Exit For
            Else
                '//no clipping yet, so add this column to my math
                combinedColumnWidth += SOlistview.Columns(i).Width
            End If
        Next
        Dim myDropDown As New ComboBox
        If weHaveClipping Then
            myDropDown.Top = e.Y - myDropDown.Height
            myDropDown.Left = combinedColumnWidth
            myDropDown.Width = visibleSpaceLeft
        Else
            '//run your normal code to place the combobox....
        End If

        SOlistview.Controls.Add(myDropDown)

你也可以修改它,只吐出一个宽度,然后在需要的时候使用你计算的可见宽度(比如滚动、鼠标点击等)

        private function _get_clippedColumn_visible_width() as int16
        Dim totalWdith As Integer = SOlistview.Width
        Dim combinedColumnWidth As Integer = 0
        Dim visibleSpaceLeft As Integer = 0
        Dim columnCount As Integer = SOlistview.Columns.Count
        Dim weHaveClipping As Boolean = False
        For i = 0 To columnCount - 1
            If combinedColumnWidth + SOlistview.Columns(i).Width > totalWdith Then
                '//we will have clipping occur if we add this column...
                visibleSpaceLeft = SOlistview.Width - combinedColumnWidth
                weHaveClipping = True
                Exit For
            Else
                '//no clipping yet, so add this column to my math
                combinedColumnWidth += SOlistview.Columns(i).Width
            End If
         Next
         return visibleSpaceLeft 
        End Function

我建议您使用TableLayoutPanel来获得更多机会。