Monday, October 12, 2009

Хитрый ListView.

Выбрал для отображения структуры каталогов - компонент ListView, который в ближайшем будущем должен удовлетворять всем требованиям для отображения. Привлек компонент именно тем, что предоставляет возможность отображать содержимое в 4х режимах, из который наиболее важны View.LargeIcons и View.Details.

В общем 3 часа на выходных убил на то, чтобы найти баг, из-за которого в режиме List все отображается нормально, а в режиме Details - только серая полоска и пустой компонент. 10 раз перепроверил создание колонок при помощи ColumnHeaders и добавление элементов в список. А все оказалось гениально просто - при обновлении содержимого я вызывал ListView.Clear() по аналогии с компонентом TextBox, хотя, как оказалось, нужно было вызывать ListView.Items.Clear(), так как ListView.Clear() вызывает ListView.Items.Clear() + совсем не очевидный ход -> ListView.Columns.Clear(). А в связи с тем, что я создавал набор колонок один раз, то они при обновлении просто стирались. А так как по логике ListView - если нет заданных колонок, то ничего рисовать не надо - и получал пустой компонент, но при переключении в вид View.List - я видел корректное отображение, что меня вводило в ступор.

Вывод: перед использованием каких-либо API, меньше опираться на логику, а больше на документацию, которая в данном случае(MSDN) доступна чуть более, чем полностью :)

No comments:

Post a Comment