Строки переменной высоты в WinForms ListView - PullRequest
7 голосов
/ 09 марта 2009

Возможно ли иметь строки с переменной высотой в WinForms ListView в режиме сведений?

Насколько мне известно, в элементе управления нет RowHeight или Rows [i] .Height.

В некоторых блогах предлагается реализовать OwnerDraw, что я и сделал, но я все еще не могу найти ничего похожего на свойство height в обработчиках событий.

В идеале высота строки должна автоматически увеличиваться для отображения многострочного текста при необходимости.

Ответы [ 7 ]

4 голосов
/ 09 марта 2009

Если вы используете режим детализации, мне интересно, будет ли DataGridView более универсальным. Каждая строка имеет высоту, или вы можете использовать AutoSizeRowsMode, чтобы сделать это автоматически. См. MSDN «Изменение размера столбцов и строк в элементе управления Windows Forms DataGridView».

2 голосов
/ 13 мая 2009

ObjectListView, упомянутый в первом ответе, не поддерживает переменную высоту строки. Об этом ясно говорится в FAQ . Базовый элемент управления списком Windows просто не поддерживает переменную высоту строки. Вы должны посмотреть на другие, написанные пользователем элементы управления.

Возможно, вы захотите рассмотреть превосходный XPTable Мэтью Холла и , его проект обновления , а также фантастический список в стиле Outlook Ли Пола Александра .

2 голосов
/ 09 марта 2009

Один вариант думать о:

Чтобы переопределить высоту элемента во всех строках, создайте фиктивный ImageList и установите его на желаемую высоту и назначьте его в виде списка в зависимости от представления или разберитесь с концепцией http://www.codeproject.com/KB/list/changerowheight.aspx

Если вы используете ObjectListView , вы можете легко и просто изменить высоту всех строк 1009 *. Но, тем не менее, невозможно изменить высоту отдельного элемента, если вы используете ListView.

1 голос
/ 23 апреля 2014

Если вы в порядке с сторонними компонентами, Better ListView поддерживает именно это (каждый элемент имеет свойство CustomHeight, поэтому каждый может иметь разную высоту):

enter image description here

1 голос
/ 13 марта 2009

Элемент управления ListBox поддерживает строки переменной высоты, но вы должны сделать все рисование самостоятельно.

Установите для DrawMode значение OwnerDrawVariable

Затем добавьте

protected override void OnDrawItem(DrawItemEventArgs e)
{
  /* Drawing code here */
}

protected override void OnMeasureItem(MeasureItemEventArgs e)
{
  /* Measure code here */
}

Я использую нарисованный владельцем список в программе под названием Task Reporter, чтобы вывести список каждой задачи, введенной пользователем. Каждая запись отличается в зависимости от объема введенного текста.

0 голосов
/ 13 марта 2009

Если вам нужны строки переменной высоты, я бы подумал об использовании DataGridView. Он очень поддерживает строки переменной высоты (с помощью стилей ячеек) и его гораздо проще использовать, чем пытаться заставить представление списка выполнять то, что вы хотите.

0 голосов
/ 12 марта 2009

Сам элемент управления Windows ListView (обернутый элементом управления .NET ListView) не поддерживает переменную высоту строки.

Если вы придерживаетесь ListView, вам нужно иметь строки фиксированной высоты.

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