Автоматическая сортировка TreeView при добавлении узлов - PullRequest
8 голосов
/ 24 декабря 2008

Существует ли простой способ добавления узлов в элемент управления WinForms .NET TreeView, в котором добавляемые новые узлы вставляются с правильным индексом, чтобы весь список узлов сортировался в алфавитном порядке? Почти такой же результат, как у TreeView.Sort().

У меня есть TreeView, который постоянно увеличивается до пары сотен узлов. Пользователь может просматривать этот TreeView в реальном времени по мере его роста. Я бы предпочел просто вставлять узлы с правильным индексом, а не вызывать TreeView.Sort () каждый раз после добавления узла.

Можно ли это сделать?

Ответы [ 2 ]

24 голосов
/ 24 декабря 2008

В winforms вы можете просто установить свойство .Sorted TreeView на True.

Когда для параметра Sorted установлено значение true, Объекты TreeNode сортируются в в алфавитном порядке по тексту значения свойств. Вы должны всегда использовать BeginUpdate и EndUpdate для поддержки производительность при добавлении большого количество предметов для сортировки В виде дерева. Когда текст существующего узел изменен, вы должны вызвать Sort to прибегать к предметам.

Ссылка MSDN

5 голосов
/ 24 декабря 2008

Почему бы вам не создать новые классы, которые наследуются от TreeView и TreeNodeCollection? Новый TreeView будет использовать ваш новый TreeNodeCollection, и вы можете переопределить Add() метод TreeNodeCollection, чтобы сделать то, что вы предлагаете.

Метод должен был бы: 1. Найдите правильную позицию для вставки и 2. Вставьте новый узел.

Самая тривиальная реализация будет повторять коллекцию до thisNode.value<=newNode.value<nextNode.value. Затем вставьте перед nextNode.Index. Вы могли бы увидеть увеличение производительности, если бы вы использовали другой алгоритм поиска, в зависимости от размера коллекции. (На ум приходит что-то вроде бинарного поиска.)

Примечание: Вы также можете просто создать метод расширения для TreeNodeCollection, который делает то же самое. Однако переопределение метода Add() гарантирует, что ваш TreeView будет всегда отсортирован. Создание только метода расширения может привести к неопределенным результатам, если он еще не отсортирован перед вашим вызовом AddIntoSorted().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...