e.ItemHeight
инициализируется на ListBox.ItemHeight
при срабатывании события. Не сохраняет ранее установленное значение. Вы должны либо изменить ListBox.ItemHeight
, либо отслеживать изменения в переменной.
РЕДАКТИРОВАТЬ: (после комментария)
Событие наступает при добавлении нового элемента и только для этого элемента.
Вызывается также для всех предметов, когда вы звоните ListBox.Refresh()
.
Насколько я понимаю ваш код, вам нужно увеличить / уменьшить ItemHeight для всех ваших предметов одновременно.
-> Я думаю, вам нужно позвонить ListBox.Refresh
при обновлении TrackBar.
РЕДАКТИРОВАТЬ 2:
На практике высота элементов изменяется, когда ListBox получает WM_MEASUREITEM , что происходит только при его первом создании или при добавлении элемента. После создания ListBox и всех его элементов при инициализации дальнейшие изменения в пределах listBox1_MeasureItem
для существующих элементов из-за обновления бесполезны (видно с помощью Reflector).
Я нашел способ принудительно отправить WM_MEASUREITEM
в ListBox без удаления и добавления всех элементов:
In place of ListBox.Refresh(), put:
ListBox.DrawMode = DrawMode.Normal;
ListBox.DrawMode = DrawMode.OwnerDrawVariable;