Как запретить дерева.Метод ExpandAll автоматически прокручивается до конца дерева?
У меня есть огромное дерево, около 1000 узлов, и когда я использую TreeView.Метод ExpandAll это прокрутка всего дерева до конца не гладко. Как сделать его прокрутку плавной или не прокрутку вообще (пусть останется в начале)?
3 ответов:
С помощью методов BeginUpdate() и EndUpdate() элемента управления TreeView можно приостановить рисование элемента управления TreeView при добавлении узлов в дерево. Метод ExpandAll () элемента управления TreeView, похоже, игнорирует эту часть, когда дело доходит до отображения части полосы прокрутки элемента управления.
Простой обходной путь состоит в том, чтобы просто развернуть родительский узел перед добавлением ветви узла к элементу управления TreeView при использовании тех BeginUpdate() и EndUpdate() методы.
Пример:
treeView1.BeginUpdate(); for (int i = 0; i < 4; ++i) { TreeNode tn = new TreeNode("Node #" + i.ToString()); tn.Expand(); for (int j = 0; j < 250; ++j) { tn.Nodes.Add("Child #" + j.ToString()); } treeView1.Nodes.Add(tn); } treeView1.EndUpdate();
Мне действительно недавно пришлось решать эту проблему. Все, что я сделал после вызова метода ExpandAll (), это установил SelectedNode в TreeView на первый узел, например:
this.treeView1.ExpandAll(); this.treeView1.SelectedNode = this.treeView1.Nodes[0];Вы должны быть осторожны, потому что это, вероятно, вызовет исключение, если в вашем TreeView есть 0 узлов, поэтому было бы хорошей идеей поместить его в блок try-catch.
Используя EnsureVisible Метод сразу после ExpandAll работает для меня:
tree.ExpandAll(); tree.Nodes[0].EnsureVisible();
Comments