[Это обновленная версия вопроса, опубликованного ранее, предыдущее название было Выбор узла по индексу в виртуальном древовидном представлении Delphi .]
После большей части дня я считаю, что у меня есть компонент Virtual Treeview (мощный, но сложный), работающий в простой форме, учитывающей данные двух таблиц.
Теперь я пытаюсь просто выбрать 1,512-й (например) из узлов верхнего уровня. Я не вижу никакого способа сделать это, кроме как получить первый узел верхнего уровня и затем вызвать GetNextSibling 1,511 в цикле.
Это кажется ненужным. Есть ли более простой способ?
UPDATE
Поскольку для инициализации узлов в моем дереве требуется доступ к базе данных, инициализация всех узлов при запуске невозможна. Когда пользователь начинает с формы без выбранной записи, это нормально. Когда пользователь прокручивает дерево, заполняется достаточно узлов, чтобы отобразить текущее окно в дереве, и производительность в порядке.
Когда пользователь запускает форму в диалоговом режиме с уже выбранной записью базы данных, я должен переместить дерево к этому узлу, прежде чем пользователь увидит форму. Это проблема, потому что, если запись ближе к концу дерева, это может занять десять секунд, пока я иду по дереву от первого узла. Каждый раз, когда я могу получить GetNextSibling (), узел инициализируется, даже если подавляющее большинство этих узлов не отображается пользователю. Я бы предпочел отложить инициализацию этих узлов до того момента, когда они станут видны пользователю.
Я знаю, что должен быть лучший способ, потому что, если я открою дерево без выбранной записи и использую вертикальную полосу прокрутки, чтобы в одной операции переместиться в середину дерева, тогда отображаются правильные узлы без инициализации узлов, которые я пропустил .
Этого эффекта я хотел бы достичь, открывая дерево с выбранной записью. Я знаю индекс узла, к которому я хочу перейти, но если я не могу попасть туда по индексу, я могу выполнить бинарный поиск по дереву, предполагая, что я могу перепрыгнуть некоторое количество узлов назад и вперед (аналогично прокрутке непосредственно к середина дерева).
В качестве альтернативы, возможно, есть какая-то настройка состояний, которую я могу сделать для представления дерева, которая оставит промежуточные узлы неинициализированными, когда я пересекаю сетку. Я пробовал начать / закончить обновление, но это не помогло.