C#ListView最后一列太宽

C#ListView最后一列太宽,c#,listview,width,autoresize,C#,Listview,Width,Autoresize,当使用“None”或“ColumnContent”作为参数调用列表视图的“AutoResizeColumns(…)”方法时,最后一列不会展开以填充整个面板,但是如果使用“HeaderSize”作为参数调用“AutoResizeColumns(…)”,则最后一列会展开,如果文本居中或右对齐,这看起来很奇怪 我已经能够解决这个问题,添加了一个额外的空白列a的结束,以扩大和合同的必要性,离开我的预期的最后一列只涵盖标题的宽度,但这似乎有点黑客。他们的方法更整洁吗 谢谢 可以将ColumnHeader

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

我已经能够解决这个问题,添加了一个额外的空白列a的结束,以扩大和合同的必要性,离开我的预期的最后一列只涵盖标题的宽度,但这似乎有点黑客。他们的方法更整洁吗

谢谢


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


ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)

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

例如:

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


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

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

或者,您可以更改最后一列的显示索引,然后在此最后一列上调用AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize),然后恢复其显示索引

是的,我当前正在使用ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)但是,这将扩展最后一列以填充可用空间。看看我刚才添加的图片。我还尝试将宽度设置为-2,但这似乎扩展了我设置宽度的任何一个冒号来填充窗口,即使它不是最后一列。你可以为此做一个,先设置Listview的宽度,比如说600,然后像前面说的那样设置每个标题列的宽度抱歉,我不太明白。你是说如果我设置ListView本身的宽度,最后一列将停止扩展以填充空间?这似乎不太可能,但我会试一试。将宽度设置为listview,然后设置为列标题以适合listview我想我们可能会描述不同的事情。这只是我想要防止扩展的最后一列的宽度。ListView本身的大小很好。我只希望它们在最后一列的右边是空白,而不是将最后一列展开以填充整个ListView。我无法预先确定列的宽度,甚至无法确定将有多少列,我只希望最后一列的宽度与需要的宽度相同(与所有其他列一样),而不是自动展开以填充ListView的其余部分。我也有同样的问题,但不幸的是,这对我不起作用