我可以在带有水平滚动条的ListView中获得总列宽中的可见列宽吗
本文关键字:滚动条 ListView 我可以 水平 | 更新日期: 2023-09-27 18:25:07
我有一个ListView,其中View为Details&其中一列具有用于编辑每行数据的组合框。
当我调整列的大小时,我在窗体中的ListView中得到了一个水平滚动条;只有向右拖动滚动时,才能看到一半。
我可以用任何方法获得ListView的Visible列宽吗??
Rgards
是的,您可以通过程序遍历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来获得更多机会。