C# 启用“自动调整大小”时获取listview中列的实际宽度

C# 启用“自动调整大小”时获取listview中列的实际宽度,c#,winforms,listview,autosize,C#,Winforms,Listview,Autosize,我根据将列的宽度设置为“-2”,这实际上会根据内容和标题自动调整大小 要自动调整列标题的宽度,请将width属性设置为-2 接下来我要做的是设置最后一列来填充listview。我是这样做的(简化): myListView.Columns[lastColumnIndex].Width +=myListView.Width-myListView.Columns.Cast().Sum(column=>column.Width); 但是列的宽度是。。。“-2” 如何获得实际宽度?问题似乎在于动态设置-

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

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

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

myListView.Columns[lastColumnIndex].Width
+=myListView.Width-myListView.Columns.Cast().Sum(column=>column.Width);
但是列的宽度是。。。“-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]。宽度=-2;
myListView.Columns[1]。宽度=-2;
myListView.Columns[2]。宽度+=myListView.Width
-myListView.Columns.Cast().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;
}
private void Resize()
{   
myListView.Columns[0]。宽度=-2;
myListView.Columns[1]。宽度=-2;
myListView.Columns[2].AutoResize(ColumnHeaderAutoResizeStyle.None);//这一个
myListView.Columns[2]。宽度+=myListView.Width
-myListView.Columns.Cast().Sum(column=>column.Width)
-(myListView.BorderStyle==BorderStyle.Fixed3D?4:2)
-SystemInformation.VerticalScrollBarWidth;
}

我不知道为什么在运行时将实际宽度设置为2。我做了测试以确定我得到了实际的宽度。你试过调试和检查吗?
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;
}