C# 列表查看最后一列太宽

本文关键字:一列 列表 最后 | 更新日期: 2023-09-27 18:31:19

当使用"None"或"ColumnContent"作为参数调用列表视图的"AutoResizeColumns(...)"方法时,最后一列不会展开以填充整个面板,但是,如果使用"HeaderSize"作为参数调用"AutoResizeColumns(...)",则最后一列将展开,如果您的文本居中或右对齐,这看起来很奇怪。

我已经能够通过在末尾添加一个额外的空白列来解决此问题,以根据需要扩展和收缩,让我预期的最后一列仅覆盖标题的宽度,但这似乎有点黑客。 他们的方法更整洁吗?

谢谢。

最后一列展开

首选宽度

C# 列表查看最后一列太宽

我遇到了同样的问题。 这似乎发生在具有最后一个 DisplayIndex 的列上。 因此,您可以在调整大小之前添加虚拟列,然后在之后将其删除:

        var dummy = new ColumnHeader();
        // dummy gets the last DisplayIndex
        listView1.Columns.Add(dummy);
        // dummy gets the remaining space instead
        listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
        listView1.Columns.Remove(dummy);

或者,您可以更改最后一列的 DisplayIndex,然后在最后一列上调用 AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize),然后恢复它的 DisplayIndex

我发现的一种解决方案是暂时减小列表视图的大小,调用"AutoResizeColumns(...)",然后重置列表视图的大小

如: int listViewWidth = listView1.Width; listView1.Width = 0; listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); listView1.Width = listViewWidth;

这似乎有点黑客,但至少它没有添加多余的列。

可以将 ColumnHeader 设置为在运行时根据列内容或标题进行调整。您可以通过将 width 属性设置为 -2(以自动调整列的宽度)来执行此操作

ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)