C#ListView列宽自动

Kai*_*Kai 73 .net c# listview width winforms

如何将ac#winforms listview控件的列宽设置为auto.宽度= -1/-2之类的东西?

Fre*_*örk 100

您给出了答案:-2将自动将列自动调整为列标题中文本的长度,-1将自动调整为列中最长的项目.全部根据MSDN.请注意,在-1的情况下,您需要在添加项目后设置列宽.因此,如果添加新项,则还需要根据ListView控件中的数据指定要自动调整大小的列(或列)的width属性.


Maj*_*jid 92

用这个:

yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
Run Code Online (Sandbox Code Playgroud)

这里开始

  • 但是如果你想要最大的标题或数据宽度怎么办?没有闪烁? (8认同)
  • 不能同时使用两者。如果尝试将 `ColumnHeaderAutoResizeStyle.ColumnContent` 和 `ColumnHeaderAutoResizeStyle.HeaderSize` 一起“或”(导致值为“3”),则在运行时该行会给出异常 *"System.ComponentModel.InvalidEnumArgumentException: '参数 'headerAutoResize 的值' (3) 对于 Enum 类型 'ColumnHeaderAutoResizeStyle' 无效。参数名称:headerAutoResize' "*. 或者,如果您执行这两行,第二行将覆盖第一个值,就好像第一行不存在一样。 (2认同)

小智 22

我做了一个程序,多次清理并重新填充我的列表视图.出于某种原因,每当我添加width = -2的列时,我遇到第一列太长的问题.我为解决这个问题所做的就是创建这个方法.

private void ResizeListViewColumns(ListView lv)
{
    foreach(ColumnHeader column in lv.Columns)
    {
        column.Width = -2;
    }
}
Run Code Online (Sandbox Code Playgroud)

关于这种方法的好处是你几乎可以把它放在任何地方调整所有列的大小.只需通过你的ListView.


Nic*_*boy 8

你可以使用这样的东西,在参数中传递你想要的ListView

    private void AutoSizeColumnList(ListView listView)
    {
        //Prevents flickering
        listView.BeginUpdate();

        Dictionary<int, int> columnSize = new Dictionary<int,int>();

        //Auto size using header
        listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);

        //Grab column size based on header
        foreach(ColumnHeader colHeader in listView.Columns )
            columnSize.Add(colHeader.Index, colHeader.Width);

        //Auto size using data
        listView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);

        //Grab comumn size based on data and set max width
        foreach (ColumnHeader colHeader in listView.Columns)
        {
            int nColWidth;
            if (columnSize.TryGetValue(colHeader.Index, out nColWidth))
                colHeader.Width = Math.Max(nColWidth, colHeader.Width);
            else
                //Default to 50
                colHeader.Width = Math.Max(50, colHeader.Width);
        }

        listView.EndUpdate();
    }
Run Code Online (Sandbox Code Playgroud)


Dav*_*era 5

还有另一个有用的方法AutoResizeColumn,它允许您使用所需的参数自动调整特定列的大小。

你可以这样称呼它:

listview1.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.HeaderSize);
listview1.AutoResizeColumn(4, ColumnHeaderAutoResizeStyle.HeaderSize);
Run Code Online (Sandbox Code Playgroud)