1

在计算任何静态宽度列宽后,我试图根据剩余大小仅重新调整 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;
            }
        }
    }
4

1 回答 1

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);
        }
于 2012-10-16T19:51:25.633 回答