Здравствуйте, VladD2,
Ваш код наверняка быстрый, но, если честно, я просто не знаю какой второй параметр нужно подставить в функию. Если ответите, то буду премного благодарен и если надо то же помогу если потребуется. А то я уже замучался с TreeViewNodeSorter: никак не могу заставить его сортировать выбранную ветку дерева (сортирует все дерево). Мне надо сделать универсальный компонент: TreeView + XmlView + ToolsStrip + ContextMenuStrip с внутренним редактированием xml (copy, paste, cut, insert, dragdrop ...) и все это за малый срок...
Вы писали:
VD>Писал тут тесты к статье и оказалось, что встроенные в TreeView средства сортировки дико тормозят.
VD>Если использовать только встроенную сортировку по строкам (ххх.Sorted = false), то еще куда не шло (хотя тоже мало пригодно для больших деревьев).
VD>Если же воспользоваться возможностью подключения внешнего компарера (xxx.TreeViewNodeSorter = new MyComparer()), то жутчайшие тормоза начинаются на совсем смешных объемах.
VD>Причем ручная реализация сортировки робатает даже значительно быстрее нежели встроенная. Причем код имеет смехотворный размер:
VD>VD>/// <summary>
VD>/// Рекурсивная сортировка веток TreeView.
VD>/// </summary>
VD>/// <param name="rootNodes">Коллекция веток подлежащая сортировке</param>
VD>private static void SortTreeNodes(
VD> TreeNodeCollection rootNodes,
VD> IComparer<TreeNode> comparer)
VD>{
VD> int count = rootNodes.Count;
VD> if (count == 0)
VD> return;
VD> // Копируем содержимое коллекции подветок в массив,
VD> // сортируем этот массв, очищаем коллекцию и копируем
VD> // подвекти обратно в коллекцию.
VD> TreeNode[] nodeArray = new TreeNode[count];
VD> rootNodes.CopyTo(nodeArray, 0);
VD> Array.Sort<TreeNode>(nodeArray, comparer);
VD> rootNodes.Clear();
VD> rootNodes.AddRange(nodeArray);
VD> // Сортируем все подветки
VD> foreach (TreeNode node in nodeArray)
VD> SortTreeNodes(node.Nodes, comparer);
VD>}
VD>
VD>В общем, дарю идею и надеюсь, что информация дойдет до тех кто занимается ВинФормсами.