C # ListView Ширина столбца Авто - PullRequest
       16

C # ListView Ширина столбца Авто

71 голосов
/ 11 августа 2009

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

Ответы [ 10 ]

98 голосов
/ 11 августа 2009

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

86 голосов
/ 06 июня 2013

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

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

от здесь

22 голосов
/ 19 июля 2012

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

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

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

1 голос
/ 17 марта 2019

Если у вас есть ListView на любой родительской панели (заполнение дока ListView), вы можете просто использовать метод ...

private void ListViewHeaderWidth() {
        int HeaderWidth = (listViewInfo.Parent.Width - 2) / listViewInfo.Columns.Count;
        foreach (ColumnHeader header in listViewInfo.Columns)
        {
            header.Width = HeaderWidth;
        }
    }
1 голос
/ 31 июля 2018

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

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

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 - ширина, необходимая для соответствия заголовку. И т.д.

1 голос
/ 14 февраля 2014

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

myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None);
myListView.Columns[0].Width = 70;
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
0 голосов
/ 23 января 2019

Стоит также отметить, что 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);
}
0 голосов
/ 20 декабря 2018

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

Как это:

listview1.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent);
listview1.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.HeaderSize);
listview1.AutoResizeColumn(4, ColumnHeaderAutoResizeStyle.HeaderSize);
0 голосов
/ 28 сентября 2017

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

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

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

  1. Щелкните форму или элемент управления, для которого вы хотите создать обработчик события.
  2. В окне «Свойства» нажмите кнопку «События»
  3. В списке доступных событий щелкните событие, для которого вы хотите создать обработчик событий.
  4. В поле справа от имени события введите имя обработчика и нажмите клавишу ВВОД
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...