Избегать расширения определенных узлов TreeNode на TreeNode.ExpandAll? - PullRequest
0 голосов
/ 21 июля 2011

До этого никто не спрашивал:

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

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

Ответы [ 2 ]

1 голос
/ 04 августа 2011

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

Поскольку метод ExpandAll не является виртуальным, у вас есть следующие способы:

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

Это работает на 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
...