【问题标题】:Get actual width of column in listview when autosize is on自动调整大小时获取列表视图中列的实际宽度
【发布时间】:2014-02-10 12:29:51
【问题描述】:

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

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

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

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

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

我怎样才能得到实际的宽度?

【问题讨论】:

  • 我不知道为什么您在运行时将实际宽度设为 2。我进行了测试以确保得到实际宽度。您是否尝试过调试和检查?

标签: c# winforms listview autosize


【解决方案1】:

似乎问题在于动态设置 -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;
}

【讨论】:

    猜你喜欢
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多