Listview AutoReziseColumns不起作用

时间:2014-06-07 19:52:05

标签: vb.net winforms listview

ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)
Listview1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent)

我遇到了问题,因为这两行分别产生了相同的结果,同时调整了ColumnContent和HeaderSize的大小。

我已经搜索过并且没有回答这个问题,我只需要通过HeaderSize来调整大小,但是上面的示例似乎没有正常工作......或者我错过了什么?

我已经使用多个listview控件进行了测试...

编辑:我这样使用它:

  Private Sub UserListResize()
    If Me.UserList.InvokeRequired Then
        Me.UserList.Invoke(Sub() UserListResize())
    Else
        UserList.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)
    End If
End Sub

我在列表视图中添加项目时就打电话给我了。

1 个答案:

答案 0 :(得分:4)

他们不做同样的事情,但有时很难区分它们。

HeaderSize将每列调整为HeaderText.Lengthlongest cell content的较大值,从而不会剪切标题文字。

ColumnContent调整为最长的单元格内容,如果HeaderText比内容长,剪辑标题文本。使用包含1或2位数/字符的列进行测试,但需要使用像“FooBar Counter of Foo”这样的长标题。

这两种模式都不会剪切列文本,这意味着当您使用标题文本时,它看起来就像它们做同样的事情。其他需要考虑的事项:

  • LV必须包含ColumnContent有意义的项目
  • 尽管名称中有Auto,但它不是持久性设置 - 只要您添加其他内容,布局可能不正确,因此您可能需要定期重置。
  • 您可以随时将它们列出来,并将AllowColumnResize设置为False
  • 您在每列上设置AutoResizeColumn(请注意它是单数)

使用Width属性和幻数-1(设置为内容)或-2(大小为标题),单个列宽可以是“自动调整大小”。这允许您仅将AutoResize逻辑应用于某些列,或根据列使用不同的设置:

 For n As Integer = 0 To myLV.Columns.Count -1 Step 2    ' just do every other
     myLV.Columns.Width = -2        ' -2 =  size to column header text
                                    ' -1 = size to longest content
 Next n

这个非常方便的地方是动态添加列。您可以将新列的宽度设置为至少在某种程度上适用于开头的内容,而不是猜测TextExtent,然后在第一次添加内容时更改它。参考:MSDN ColumnHeader Width Property