Элемент управления ListBox поддерживает строки переменной высоты, но вы должны сделать все рисование самостоятельно.
Установите для DrawMode значение OwnerDrawVariable
Затем добавьте
protected override void OnDrawItem(DrawItemEventArgs e)
{
/* Drawing code here */
}
protected override void OnMeasureItem(MeasureItemEventArgs e)
{
/* Measure code here */
}
Я использую нарисованный владельцем список в программе под названием Task Reporter, чтобы вывести список каждой задачи, введенной пользователем. Каждая запись отличается в зависимости от объема введенного текста.