我试图在计算任何静态宽度列宽后,根据剩余大小仅重新调整ListView的某些列的大小。例如,我不希望列,例如数量,价格等......调整大小,但是,我希望通常具有更广泛数据的列(例如名称,描述)变宽。以下是我尝试在下面使用的方法,但它不起作用。
BTW,我在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;
}
}
}
答案 0 :(得分:1)
这样的事情应该适合你...在我的示例中,我将每个固定列的“Tag”属性设置为字符串“fixed”,而不是保留固定和不固定索引的列表。
int fixedWidth = 0;
int countDynamic = 0;
for (int i = 0; i < listView1.Columns.Count; i++)
{
ColumnHeader header = listView1.Columns[i];
if (header.Tag != null && header.Tag.ToString() == "fixed")
fixedWidth += header.Width;
else
countDynamic++;
}
for (int i = 0; i < listView1.Columns.Count; i++)
{
ColumnHeader header = listView1.Columns[i];
if (header.Tag == null)
header.Width = ((listView1.Width - fixedWidth) / countDynamic);
}