Как установить фиксированный размер столбцов в Winforms ListView со стилем представления View.SmallIcon - PullRequest
2 голосов
/ 31 января 2012

У меня есть приложение C # Winforms и я использую элемент управления ListView. Когда я устанавливаю для свойства View значение View.SmallIcon, значки не выравниваются по столбцам фиксированного размера. Предметы распределены повсюду.

Есть ли свойство, которое нужно установить в элементе управления ListView, чтобы вызывать столбцы фиксированного размера в представлении SmallIcon.

Обновление:
Ниже скриншоты, изображающие проблему, с которой я сталкиваюсь. На снимке экрана № 1 показан проводник Windows, в котором имена файлов имеют фиксированную ширину и введен многоточие. Хотя технически в игре не может быть никаких реальных столбцов, значки выровнены по типу «столбчатый». Изображение http://www.barramsoft.com/pub/images/ListViewSmallIcons2.png

Снимок экрана # 2 показывает, с чем я сталкиваюсь. Иконки имеют не очень красивое расположение: Изображение http://www.barramsoft.com/pub/images/ListViewSmallIcons.png

Ответы [ 4 ]

1 голос
/ 24 сентября 2014

Я решаю это, контролируя длину текста, как показано ниже:

   int max_length = 30; // you can use any value here

   ListViewItem l = lsvLocalFile.Items.Add("some text value");
   l.ImageIndex = index_of_smallimagelist;
   if (l.Text.Length > max_length) 
       l.Text = l.Text.Remove(max_length - 3) + "...";
   else
       l.Text = l.Text.PadRight(max_length);
1 голос
/ 01 февраля 2012

Вы можете попробовать бесплатное Лучше компонент ListView Express , он показывает элементы в представлении SmallIcon всегда выровненными и точно так же, как в Windows Explorer.

Вы также можете отображать заголовки столбцов во всех представлениях (не только в деталях), что невозможно в .NET ListView.

ComponentOwl также предлагает полную версию со многими дополнительными функциями.

1 голос
/ 31 января 2012

Единственным представлением, в котором используются столбцы, является представление «Сведения».

Представление «Маленькая иконка» аналогично представлению «Большая иконка», за исключением значков меньшего размера. Иконки могут быть расположены по всему элементу управления. Вы можете поиграть с этим в Windows Explorer, изменив вид; он использует элемент управления ListView.

Если вы хотите, чтобы значки выстраивались в ряды с небольшими строками, объедините свойство Alignment со свойством AutoArrange.

Установите Alignment на ListViewAlignment.Top или ListViewAlignment.Left и AutoArrange на true, чтобы значки автоматически располагались в этом положении.

Вы можете сделать это либо в конструкторе, либо с помощью кода:

myListView.Alignment   = ListViewAlignment.Top;
myListView.AutoArrange = true;
0 голосов
/ 07 марта 2013

У меня тоже была эта проблема. Я решил это, добавив столбец в ListView, используя fileNamesListView.Columns.Add(new ColumnHeader());, а затем установив fileNamesListView.Columns[0].Width ширину самого длинного текста элемента и его изображения. Недостатком является то, что все столбцы имеют ширину самого широкого столбца.

private void PopulateListView(List<string> fileNames)
{
    using (Graphics g = this.CreateGraphics())
    {
        int longestTextWidth = 0;
        int longestTextIndex = 0;

        for (int i = 0; i < fileNames.Count; i++)
        {
            ListViewItem item = new ListViewItem(fileNames[i]);
            item.ImageIndex = 0; // Do whatever you do to choose the image.
            fileNamesListView.Items.Add(item);

            // Find the longest file name.
            int textWidth = Size.Round(g.MeasureString(fileNames[i], fileNamesListView.Font)).Width;
            if (textWidth > longestTextWidth)
            {
                longestTextWidth = textWidth;
                longestTextIndex = i;
            }
        }

        // Find the width of the image used.
        int imageWidth = filesImageList.Images[fileNamesListView.Items[longestTextIndex].ImageIndex].Width;

        fileNamesListView.Columns[0].Width = longestTextWidth + imageWidth;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...