C#ListView最后一列太宽

时间:2016-01-21 06:18:29

标签: c# listview width autoresize

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

我已经能够通过添加一个额外的空白列来解决这个问题,根据需要扩展和收缩,留下我想要的最后一列只是覆盖标题的宽度,但这似乎有点hackie。他们是一个更简洁的方式吗?

感谢。

Last Column Expanded

Preferred Width

3 个答案:

答案 0 :(得分:1)

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

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

这似乎有点hackie但至少它并没有添加一个多余的列。

答案 1 :(得分:0)

我有同样的问题。这似乎发生在具有最后一个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

答案 2 :(得分:-1)

ColumnHeader可以设置为在运行时调整到列内容或标题。您可以通过将width属性设置为-2(自动调整列的宽度)

来完成此操作

OR

ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)