vb.net - ListView AutoReziseColumns 不起作用

标签 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

当我完成在 ListView 上添加项目时,我会调用此函数。

最佳答案

它们所做的事情并不完全相同,但有时很难区分它们。

HeaderSize 将每列的大小调整为 HeaderText.Length最长单元格内容 中的较大者,从而不会剪切标题文本。

ColumnContent 调整为最长的单元格内容,如果 HeaderText 比内容长,则剪裁标题文本。使用包含 1 或 2 个数字/字符的列进行测试,但标题很长,例如“FooBar Counter of Foo”。

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

  • LV 中必须包含项目,ColumnContent 才有意义
  • 尽管名称中有 Auto,但它不是持久设置 - 一旦您添加其他内容,布局可能会不正确,因此您可能需要定期重置它。
  • 您始终可以按照自己的意愿排列它们,并将 AllowColumnResize 设置为 False
  • 您可以在每列的基础上设置AutoResizeColumn(注意它是单数)

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

 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 .

关于vb.net - ListView AutoReziseColumns 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101011/

相关文章:

.net - 覆盖具有 ID 的对象的等于

asp.net - asp.net 中的计时器和 UpdatePanel

c# - 无限垂直滚动

android - getItem(position) 为不同的位置值返回相同的对象

Android listview 搜索导致 fragment 中的索引越界异常

android - 清除 ListView 中的 Android 编辑文本

.net - 替换 .Net 中的斜杠

VB.NET制作多个具有相同名称但不同参数的子程序

c# - 删除/编辑 TabPages 的 TabControl 填充

winforms - 如何打开刚刚添加的ContextMenuStrip?