.NET ListView заполнение строк

2

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

Теги:
listview

2 ответа

8

Я знаю, что этот пост довольно старый, однако, если вы никогда не нашли лучший вариант, у меня есть сообщение в блоге, которое может помочь, оно включает использование 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);
  • 1
    Пожалуйста, опубликуйте соответствующий контент из блога в своем ответе.
  • 1
    LVM_SETICONSPACING применяется только к ListViews в представлении значков. Любой способ сделать эквивалентную вещь, когда в представлении «Детали» изменить заполнение строки (а не высоту строки, что, как говорит @Joel Lucsy, можно сделать с помощью списка изображений)?
3

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню