Как запретить дерева.Метод ExpandAll автоматически прокручивается до конца дерева?



У меня есть огромное дерево, около 1000 узлов, и когда я использую TreeView.Метод ExpandAll это прокрутка всего дерева до конца не гладко. Как сделать его прокрутку плавной или не прокрутку вообще (пусть останется в начале)?

534   3  

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

    Ничего не найдено.