C# Windows 窗体 ListView 在按宽度自动调整大小 = -1 后获取列的实际宽度?

Posted

技术标签:

【中文标题】C# Windows 窗体 ListView 在按宽度自动调整大小 = -1 后获取列的实际宽度?【英文标题】:C# Windows Forms ListView get columns real width after autoresize by width = -1? 【发布时间】:2021-04-04 07:18:25 【问题描述】:

我已经通过 WinForms ListView 控件上的一些自动列 (ColumnHeader) 宽度。

Width = -1 根据内容宽度设置自动宽度,根据标题和内容设置 -2。 但是我找不到任何方法来获得自动计算的宽度,然后由-1/-2 设置。 ColumnHeader 项目的宽度属性返回 -1。

有没有办法通过将属性设置为 -1/-2 来获得以像素为单位的实际宽度?

谢谢!

【问题讨论】:

在分配 -1-2 值后立即读取 ColumnHeader.Width 属性。它将返回实际宽度。 使用ColumnHeader.AutoResize()方法设置大小模式,意思就清楚多了。 ColumnHeader 的Width 属性始终返回在本机控件中设置的值(通过SendMessage -> LVM_GETCOLUMNWIDTH):它始终返回以像素为单位的大小。 @dr.null 它不会返回实际宽度。将 20 添加到宽度将导致宽度 19。请参见此处:i.ibb.co/w0jZwF6/***.png 是的。 20 - 1 = 19。仔细检查您在做什么并仔细阅读第二条评论。 【参考方案1】:

使用ColumnHeader.AutoResizeColumns(ColumnHeaderAutoResizeStyle style) 即可。

然后ColumnHeader.Width属性返回实际宽度。

【讨论】:

以上是关于C# Windows 窗体 ListView 在按宽度自动调整大小 = -1 后获取列的实际宽度?的主要内容,如果未能解决你的问题,请参考以下文章

C#中listview控件是啥东东??咋用的

C# 刷新另一个窗体的listview

影响 ListView 标头的 Windows 主题

c# listview 如何改变某一行的位置

C# wpf 中 一个窗体中的texbox内容显示另一个窗体中的listview中的内容。如何实现

如何更新 Listview(Windows 窗体)?