как избежать проблемы отрицательного номера узла в виде дерева - PullRequest
1 голос
/ 03 марта 2011

Я связываю данные таблицы базы данных с деревом. В документации упоминается свойство считать узлы как целочисленное значение, которое подписано 2 байтами. поэтому, если узлы превышают этот диапазон, количество узлов становится отрицательным. Есть ли обходной путь для этого?

1 Ответ

3 голосов
/ 03 марта 2011

Да, это задокументированная ошибка .К счастью, никто никогда не сталкивался с этим в реальном мире, потому что совершенно бессмысленно, когда одному элементу управления TreeView нужно отображать более 32 767 узлов.

Как упоминалось в статье базы знаний, лучшим обходным путем являетсяподдерживать меньше узлов в вашем TreeView контроле.Попробуйте разделить данные между несколькими TreeViews или использовать другой элемент управления, который лучше подходит для таких невероятно больших объемов данных.

Если вам абсолютно необходимо использовать TreeView, Microsoft рекомендует сохранить следующее вобратите внимание:

  • Производительность будет чрезвычайно низкой, если вы добавляете все больше и больше узлов.
  • Не добавляйте более 65535 узлов.(Это ограничение, наложенное собственным элементом управления, который использует целое число без знака для хранения счетчика узлов.)
  • Используйте SendMessage API-функцию , чтобы получить истинное количество узлов.Кроме того, вы можете использовать переменную уровня модуля или общедоступного уровня, чтобы отслеживать количество узлов в TreeView.Каждый раз, когда вы добавляете или удаляете узел, увеличиваете или уменьшаете переменную на единицу.Это необходимо, если вам необходимо определить количество узлов, поскольку свойство Count коллекции Nodes не будет возвращать правильное значение.
  • Не полагайтесь на свойство Index узлаобъект.Например, свойство Index равно 32767 для узла 32767, но -32768 для узла 32768.
  • Вы по-прежнему можете ссылаться на узел, используя его Key или передавая число вNodes коллекция.
    Например:

    TreeView1.Nodes(40000) refers to node 40000.
    
...