Ширина столбца CView ListView Auto

Как установить ширину столбца элемента управления С# winforms listview в auto. Что-то вроде width = -1/-2?

Ответ 1

Вы ответили: -2 будет авторизовать столбец до длины текста в заголовке столбца, -1 будет авторизоваться до самого длинного элемента в столбце. Все согласно MSDN. Обратите внимание, что в случае -1 вам нужно будет установить ширину столбца после добавления элемента (ов). Поэтому, если вы добавляете новый элемент, вам также необходимо назначить свойство width столбца (или столбцов), которое вы хотите авторизовать, в соответствии с данными в элементе управления ListView.

Ответ 2

Используйте это:

yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);

из здесь

Ответ 3

Я сделал программу, которая очищала и повторно заполняла мой список несколько раз. По какой-то причине, когда я добавлял столбцы с шириной = -2, я столкнулся с проблемой, когда первый столбец слишком длинный. Что я сделал, чтобы исправить это, создайте этот метод.

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

Самое замечательное в этом методе заключается в том, что вы можете в значительной степени поместить это в любом месте, чтобы изменить размер всех ваших столбцов. Просто перейдите в ListView.

Ответ 4

Развернувшись немного на ответ Fredrik, если вы хотите установить ширину автоматического изменения размера столбца на лету например: установка ширины авторазмера первого столбца до 70:

myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None);
myListView.Columns[0].Width = 70;
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);

Ответ 5

Это решение сначала изменит размер столбцов на основе данных столбцов, если размер измененной ширины меньше размера заголовка, он изменит размер столбцов, по крайней мере, на соответствие заголовку. Это довольно уродливое решение, но оно работает.

lstContacts.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
colFirstName.Width = (colFirstName.Width < 60 ? 60 : colFirstName.Width);
colLastName.Width = (colLastName.Width < 61 ? 61 : colLastName.Width);
colPhoneNumber.Width = (colPhoneNumber.Width < 81 ? 81 : colPhoneNumber.Width);
colEmail.Width = (colEmail.Width < 40 ? 40 : colEmail.Width);

lstContacts - это ListView. colFirstName - это столбец, где 60 - ширина, необходимая для соответствия заголовку. Etc.

Ответ 6

Вы можете использовать что-то вроде этого, передавая 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();
    }

Ответ 7

Я считаю, что автор искал эквивалентный метод через IDE, который бы сгенерировал код позади и удостоверился, что все параметры были на месте и т.д. Найденный от MS:

Создание обработчиков событий в конструкторе форм Windows

Исходя из опыта VB, это то, что я искал, вот краткая версия для клика:

  • Нажмите форму или элемент управления, для которого вы хотите создать обработчик событий.
  • В окне "Свойства" нажмите кнопку "События"
  • В списке доступных событий щелкните событие, для которого вы хотите создать обработчик событий.
  • В поле справа от имени события введите имя обработчика и нажмите клавишу ВВОД

Ответ 8

Существует еще один AutoResizeColumn метод AutoResizeColumn позволяет автоматически изменять размер определенного столбца с требуемым параметром.

Как это:

listview1.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.HeaderSize);
listview1.AutoResizeColumn(4, ColumnHeaderAutoResizeStyle.HeaderSize);

Ответ 9

Также стоит отметить, что ListView может отображаться не так, как ожидалось, без предварительного изменения свойства:

myListView.View = View.Details; // or View.List

Для меня Visual Studio почему-то по умолчанию использует View.LargeIcon, поэтому ничего не отображается, пока не будет изменено.

Завершите код, чтобы отобразить один столбец в ListView и освободить место для вертикальной полосы прокрутки.

lisSerials.Items.Clear();
lisSerials.View = View.Details;
lisSerials.FullRowSelect = true;

// add column if not already present
if(lisSerials.Columns.Count==0)
{
    int vw = SystemInformation.VerticalScrollBarWidth;
    lisSerials.Columns.Add("Serial Numbers", lisSerials.Width-vw-5);
}

foreach (string s in stringArray)
{
    ListViewItem lvi = new ListViewItem(new string[] { s });
    lisSerials.Items.Add(lvi);
}