2012-10-16 3 views
3

Я работаю с WinForms в .NET 2010. Я создал пользовательский элемент управления, который наследует Treeview, и я использую чертеж владельца для текстовой части моих treenodes..NET Treeview: Как предотвратить изменение старых дочерних узлов?

Теперь я должен был решить странную проблему производительности:

Когда текст TreeNode (я называю его «ParentNode») получает изменилось, управление TreeView пожаров DrawNode-событие для каждого из «parentnodes»» s дочерние узлы, независимо от того, видны они или нет!

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

Thx заблаговременно за помощь!

ответ

2

Я не получаю звездное воспроизведение для этого, оно генерирует только события DrawNode для видимых узлов. Тем не менее, я вижу, что он генерирует события DrawNode для дочерних узлов, чей родительский код рухнул. Вы можете отфильтровать их вот так:

private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) { 
     if (e.Bounds.Height == 0) return; 
     // etc.. 
    } 
+0

thx, это лучше. но по-прежнему занимает почти одну секунду, чтобы получить tv redrawn, в то время как моя форма не отвечает ... для перерисовки Я использую Backgroundworker, который вызывает метод делегата. в этом методе выполняются команды tv.beginupdate, treenode.text renaming и tv.endupdate. Как я могу ответить на свою форму, пока эти вещи выполняются? –

+0

Ух, это жалко дорого, если вы делаете это для каждого узла. Обновляйте только в обработчике событий RunWorkerCompleted и используйте Begin/EndUpdate(). Или много из них в вызове ReportProgress. –

+0

о, извините. Это делается только для того единственного узла, который я обновил –

Смежные вопросы