2011-07-21 4 views
0

Никто не спросил, что раньше:Избегайте расширения определенных узлов TreeNode на TreeNode.ExpandAll?

Что является эффективным способом, чтобы избежать расширения некоторых TreeNode класса потомков в течение WinForms TreeView, когда пользователь делает «Развернуть все» вещь, но все же позволить ему расширять такие узлы, нажав на символ +?

Конечно, я могу справиться с BeforeExpand, но у меня есть настройки e.Cancel для true только если это ExpandAll операция трудное время. Интересно, как я могу это определить? Я мог бы подкласс TreeView и переопределить ExpandAll - но это не может быть переопределен ...

+0

Простой вопрос, ответы на вопросы нет? Наверное, не так тривиально, как я думал. – TheBlastOne

ответ

0

Это работает на 100%. Я думаю. Вздох.

Private Sub MyTreeViewExpandNodes(ByVal Nodes As TreeNodeCollection) 
    For Each Node As TreeNode In Nodes 
     If Not (TypeOf Node Is SpecialTreeNode) Then 
     Node.Expand() 
     MyTreeViewExpandNodes(Node.Nodes) 
     End If 
    Next 
    End Sub 

    Private Sub MyTreeView_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyTreeView.KeyDown 
    If e.KeyCode = Keys.Multiply Then 
     e.Handled = True 
     e.SuppressKeyPress = True 
     MyTreeViewExpandNodes(MyTreeView.Nodes) 
    End If 
    End Sub 
+0

Как хромой. Я принял свой собственный ответ. Еще раз. Мне стыдно. – TheBlastOne

1

Похожи стандартным .NET TreeView Безразлично `имеет другой путь, чем вы описали: флаг запуска до того ExpandAll, обрабатывать BeforeExpand и включите е. Отмена для соответствующих узлов, когда флаг включен.

В качестве метода ExpandAll ISN `виртуального у вас есть эти пути следовать:

  • наследуется от класса TreeView и добавить метод ExpandAllEx где вызвать этот флаг. Нет хорошего, потому что вам нужно использовать класс дерева везде, где вы используете экземпляр дерева.
  • Добавить метод расширения для класса TreeView, где используется свойство tree.Tag для этого флага. Более полезный способ с минимальными изменениями в существующем коде.
+0

У меня есть общая идея обоих вариантов, но я не понимаю, как реализовать их. Что бы сделал метод расширения? Как я могу убедиться, что он срабатывает, если пользователь нажал звездочку на цифровой панели? Аналогично, как бы я мог убедиться, что ExpandAllEx в моем потомке TreeView будет запущен вместо ExpandAll, если пользователь нажимает на звездочку? – TheBlastOne

+0

+1 для посвящения учетной записи, в соответствии с названием :) – TheBlastOne

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