打开自动调整大小时,获取listview中列的实际宽度

时间:2014-02-10 12:29:52

标签: c# winforms listview autosize

我根据MSDN将列的宽度设置为“-2”,它实际上按内容和标题自动调整大小。

  

要自动调整到列标题的宽度,请将Width属性设置为-2

我要做的下一件事是设置最后一列来填充listview。我这样做(简化):

myListView.Columns[lastColumnIndex].Width
    += myListView.Width - myListView.Columns.Cast<ColumnHeader>().Sum(column => column.Width);

但是列的宽度是......“-2”。

如何获得实际宽度?

1 个答案:

答案 0 :(得分:2)

似乎问题是关于动态设置-2。我的代码看起来像:

private void Resize()
{   
myListView.Columns[0].Width = -2;            
myListView.Columns[1].Width = -2;

myListView.Columns[2].Width += myListView.Width 
                               - myListView.Columns.Cast<ColumnHeader>().Sum(column => column.Width)
                               - (myListView.BorderStyle == BorderStyle.Fixed3D ? 4 : 2)
                               - SystemInformation.VerticalScrollBarWidth;
}

解决方案是添加一行:

private void Resize()
{   
myListView.Columns[0].Width = -2;            
myListView.Columns[1].Width = -2;
myListView.Columns[2].AutoResize(ColumnHeaderAutoResizeStyle.None); // This one

myListView.Columns[2].Width += myListView.Width 
                               - myListView.Columns.Cast<ColumnHeader>().Sum(column => column.Width)
                               - (myListView.BorderStyle == BorderStyle.Fixed3D ? 4 : 2)
                               - SystemInformation.VerticalScrollBarWidth;
}