Vb.net Listview AutoReziseColumns不工作

Vb.net Listview AutoReziseColumns不工作,vb.net,winforms,listview,Vb.net,Winforms,Listview,我遇到了一个问题,因为这两行分别产生相同的结果,即同时调整ColumnContent和HeaderSize的大小 我已经搜索过了,但没有找到答案,我只需要根据HeaderSize调整大小,但上面的例子似乎无法正常工作。。。还是我遗漏了什么 我已经测试了多个listview控件 编辑:我是这样使用它的: ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize) Listview1.AutoResizeColumns(Co

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

我已经搜索过了,但没有找到答案,我只需要根据HeaderSize调整大小,但上面的例子似乎无法正常工作。。。还是我遗漏了什么

我已经测试了多个listview控件

编辑:我是这样使用它的:

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

当我在listview上添加完项目后,我会打电话给它。

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

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

ColumnContent
调整为最长单元格内容的大小,如果标题文本比内容长,则将剪辑标题文本。用一个包含1或2个数字/字符的列来测试这一点,但要有一个长标题,比如“FooBar Counter of Foo”

不过,这两种模式都不会剪切列文本,这意味着当您对标题文本感兴趣时,它们可能会执行相同的操作。其他需要考虑的事项:

  • LV中必须有项目,才能使
    列内容
    有意义
  • 尽管名称中有
    Auto
    ,但它不是一个持久设置-一旦添加其他内容,布局可能不正确,因此您可能需要定期重置它
  • 您可以始终按照自己的意愿对其进行布局,并将
    AllowColumnResize
    设置为False
  • 您可以按每列设置
    AutoResizeColumn
    (注意它是单数)
单个列宽可以使用
Width
属性和-1(设置为内容)或-2(大小设置为标题)的幻数“自动调整大小”。这允许您仅将自动调整大小逻辑应用于某些列,或根据列使用不同的设置:

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

一个非常方便的地方是动态添加列。与猜测TextExtent不同,您可以将新列的宽度设置为至少在某种程度上适用于开始时的宽度,然后在首次添加内容时对其进行更改。参考资料:。

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

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

ColumnContent
调整为最长单元格内容的大小,如果标题文本比内容长,则将剪辑标题文本。用一个包含1或2个数字/字符的列来测试这一点,但要有一个长标题,比如“FooBar Counter of Foo”

不过,这两种模式都不会剪切列文本,这意味着当您对标题文本感兴趣时,它们可能会执行相同的操作。其他需要考虑的事项:

  • LV中必须有项目,才能使
    列内容
    有意义
  • 尽管名称中有
    Auto
    ,但它不是一个持久设置-一旦添加其他内容,布局可能不正确,因此您可能需要定期重置它
  • 您可以始终按照自己的意愿对其进行布局,并将
    AllowColumnResize
    设置为False
  • 您可以按每列设置
    AutoResizeColumn
    (注意它是单数)
单个列宽可以使用
Width
属性和-1(设置为内容)或-2(大小设置为标题)的幻数“自动调整大小”。这允许您仅将自动调整大小逻辑应用于某些列,或根据列使用不同的设置:

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

一个非常方便的地方是动态添加列。与猜测TextExtent不同,您可以将新列的宽度设置为至少在某种程度上适用于开始时的宽度,然后在首次添加内容时对其进行更改。参考资料:。

你能展示一下你是如何在代码中使用它的吗?是的,我编辑了这个问题。它们不会做同样的事情,但是很难区分它们,除非标题文本很长或很短。如果“column”文本较长和/或将被剪裁,它不会收缩列宽以匹配标题文本。您可以始终将列宽设置为所需的宽度,然后将标题样式更改为“不可单击”。此外,在添加项之前,它不会做任何事情,然后一旦添加更多项,它可能会再次关闭,因此您必须再次调用该方法。因为子项/单元格内容几乎总是比标题长。header方法仅用于固定长标题文本的列大小(“缺少天数”,其中内容为“2”、“12”、“23”)。它不会故意剪辑内容(它会剪辑标题,不会剪辑单元格内容)。您也可以尝试-2技巧(在循环中将每个列宽设置为-2),看看这是否能满足您的需要。from:
要自动调整列头的宽度,请将width属性设置为-2。
您可以演示如何在代码中使用它吗?是的,我编辑了这个问题。它们不会做相同的事情,但是很难区分它们,除非标题文本真的很长或很短。如果“column”文本较长和/或将被剪裁,它不会收缩列宽以匹配标题文本。您可以始终将列宽设置为所需的宽度,然后将标题样式更改为“不可单击”。此外,在添加项之前,它不会做任何事情,然后一旦添加更多项,它可能会再次关闭,因此您必须再次调用该方法。因为子项/单元格内容几乎总是比标题长。header方法仅用于固定长标题文本的列大小(“缺少天数”,其中内容为“2”、“12”、“23”)。它不会故意剪辑内容(它会剪辑标题,不会剪辑单元格内容)。您还可以尝试-2技巧(将每个列宽设置为-2)