.NET ListView заполнение строк - PullRequest
2 голосов
/ 12 сентября 2008

Кажется, что нет способа изменить отступы (или высоту строки) для всех строк в .NET ListView. У кого-нибудь есть элегантный взлом?

Ответы [ 2 ]

8 голосов
/ 25 октября 2012

Я знаю, что это сообщение довольно старое, однако, если вы никогда не нашли лучший вариант, у меня есть сообщение в блоге , которое может помочь, оно включает использование LVM_SETICONSPACING.

Согласно моему блогу,

Сначала вам нужно добавить:

using System.Runtime.InteropServices;

Затем вам нужно будет импортировать DLL, чтобы вы могли использовать SendMessage для изменения параметров ListView.

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

После этого создайте следующие две функции:

public int MakeLong(short lowPart, short highPart)
{
    return (int)(((ushort)lowPart) | (uint)(highPart << 16));
}

public void ListViewItem_SetSpacing(ListView listview, short leftPadding, short topPadding) 
{     
    const int LVM_FIRST = 0x1000;     
    const int LVM_SETICONSPACING = LVM_FIRST + 53;     
    SendMessage(listview.Handle, LVM_SETICONSPACING, IntPtr.Zero, (IntPtr)MakeLong(leftPadding, topPadding));      
} 

Затем, чтобы использовать функцию, просто передайте свой ListView и установите значения. В этом примере 64 пикселя - это ширина изображения, 32 пикселя - это мой горизонтальный отступ / отступ, 100 пикселей - это высота изображения, а 16 пикселей - мой вертикальный интервал / заполнение, и для обоих параметров требуется минимум 4 пикселя.

ListViewItem_SetSpacing(this.listView1, 64 + 32, 100 + 16);
3 голосов
/ 12 сентября 2008

Обходной путь - это использовать ImageList такого размера, какой вы хотите, чтобы элементы были. Просто заполните пустое изображение цветом фона. Вы даже можете сделать изображение шириной 1, чтобы не занимать много места по горизонтали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...