如何以编程方式使 ListView 的列自动调整大小?

Posted

技术标签:

【中文标题】如何以编程方式使 ListView 的列自动调整大小?【英文标题】:How can I make a ListView's columns auto-resize programmatically? 【发布时间】:2010-09-08 15:01:26 【问题描述】:

我找到了一些使用 Win32 api 或模拟 ^+ 按钮组合 (ctrl-+) using SendKeys 的示例,但至少使用 SendKeys 方法listview 抓住光标并将其设置为沙漏,直到我按下键盘上的开始按钮。最干净的方法是什么?

【问题讨论】:

您能否更具体地了解“自动调整大小”的含义?您的意思是希望它们在窗口(和列表视图)改变大小时随机播放,还是希望它们根据显示的数据长度调整大小? 我希望它们根据显示的数据长度调整大小。 【参考方案1】:

根据MSDN,如果您将列宽设置为-1,那么它将自动调整为最宽的项目

【讨论】:

这似乎对我不起作用。我在运行时添加 listviewitems 并且列保持纤细。 很奇怪。也许 ListView 需要可见并且已经添加了项目。或者也许调用 Application.DoEvents 可以解决问题?您可以随时尝试使用 P/Invoke 自己发送 LVSCW_AUTOSIZE:vbnet.mvps.org/index.html?code/comctl/lvcolumnautosize.htm(VB6 链接) 您是否尝试将列表视图更新包装在 BeginUpdate()/EndUpdate() 括号中?当您特别结束更新时,-1 技巧可能会起作用,从而触发重新计算列表视图的显示方式。【参考方案2】:

看起来像调用myListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent) 会做你想做的事。我想,在添加一个项目后调用它。

更多信息here

【讨论】:

应该是 ColumnHeaderAutoResizeStyle::ColumnContent 链接已失效。【参考方案3】:

在添加内容后循环遍历所有列并将宽度设置为-1。

【讨论】:

【参考方案4】:

将以下例程添加到您的代码后,然后从任何过程/函数调用它。但不要在“Form_Load”过程中使用它。仅在您将项目添加到 ListView 后调用它(或者如果您要进行多次添加,请在所有添加结束时调用一次):

    Private Sub AutoSizeListViewColumns(oListView As ListView)
        Dim nCol As Integer = 0
        SuspendLayout()
        For nCol = 0 To (oListView.Columns.Count - 1)
            oListView.Columns(nCol).Width = -1  'forces autosizing on column
        Next
        oListView.Refresh()
        ResumeLayout()
    End Sub

【讨论】:

以上是关于如何以编程方式使 ListView 的列自动调整大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中以编程方式设置listview高度

如何以编程方式设置 UIView 的自动调整大小掩码?

调整大小后使用自动布局以编程方式居中 UIImageVIew

ExtJS:如何使窗口足够大以容纳 FormPanel?

如何使用自动调整其高度的 SnapKit 以编程方式创建 UITableViewCell?

如何以编程方式调整按钮动画的大小