在计算任何静态宽度列宽后,我试图根据剩余大小仅重新调整 ListView 的某些列的大小。例如,我不希望列(例如数量、价格等)调整大小,但我希望通常具有更宽数据(例如名称、描述)的列变得更宽。这是我在下面尝试使用的方法,但是它不起作用。
顺便说一句,我在 ListView 上触发 ClientSizeChanged 事件时调用此方法。不确定这是否相关。
public static void ResizeListViewColumns(ListView lv, List<int> fixedColumnIndexes, List<int> nonFixedColumnIndexes)
{
int lvFixedWidth = 0;
int lvNonFixedWidth = 0;
if (fixedColumnIndexes.Count + nonFixedColumnIndexes.Count != lv.Columns.Count)
{
throw new Exception("Number of columns to resize does not equal number of columns in ListView");
}
else
{
// Calculate the fixed column width
// Calculate the non-fixed column width
// Calculate the new width of non-fixed columns by dividing the non-fixed column width by number of non-fixed columns
foreach (var fixedColumn in fixedColumnIndexes)
{
lvFixedWidth += lv.Columns[fixedColumn].Width;
}
foreach (var nonFixedColumn in nonFixedColumnIndexes)
{
lvNonFixedWidth += lv.Columns[nonFixedColumn].Width;
}
int numNonFixedColumns = nonFixedColumnIndexes.Count;
foreach (var newNonFixedColumn in nonFixedColumnIndexes)
{
lv.Columns[newNonFixedColumn].Width = lvNonFixedWidth / numNonFixedColumns;
}
}
}