Здравствуйте, Viktor Sklyar, Вы писали:
VS>Сейчас, перестраивая дерево я получаю такие проблемы: VS>- при перерисовки список довольно неприятно дергается, хотя VS>все операции с деревом я произвожу в блоке
Создай свой TreeView пронаследовавшись.
Добавь проперти IsMyRefresh.
Перед изменением дерева, до BeginUpdate задай IsMyRefresh = true;
После изменения дерева, до EndUpdate задай IsMyRefresh = false;
Зачем IsMyRefresh ?
Вот для этого ( в твоём TreeView ):
private int WM_ERASEBKGND = 0x0014;
protected override void WndProc( ref Message m )
{
if ( ( m.Msg == WM_ERASEBKGND )&& OurRefresh )
{
return;
}
else
{
base.WndProc( ref m );
}
}
VS>и еще, если дерево было проскроллированно до какой-то определенной VS>позиции, т.е. TopNode != первому узлу, то построим дерево заново VS>я естесственно попадаю опять в начало дерева. Это мне вообще не VS>нравится. Можно конечно запоминать его и в новом дереве начинать VS>отображение с него, но как это сделать?
Перед обновлением дерева запомни текущую выбранную ноду. После обновления дерева
сделай CurrentNode.EnsureVisible();
В случае если этой ноды уже нет (удалена), то сделай то же самое с Parent.