Re: работа с TreeView
От: NortiBoy  
Дата: 23.05.04 20:34
Оценка:
Здравствуйте, 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.

Удачи
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.