避免在TreeNode.ExpandAll上扩展某些TreeNode节点?

时间:2011-07-21 07:40:37

标签: winforms user-interface treeview treenode

之前没有人问过:

当用户执行“全部展开”操作时,什么是避免WinForms TreeNode中某些TreeView类后代扩展的有效方法,但仍然允许他通过单击扩展此类节点+符号?

当然我可以处理BeforeExpand,但我很难将e.Cancel设置为true,只要它是ExpandAll操作。我想知道我怎么能确定这个?我可以继承TreeView并覆盖ExpandAll - 但是那个不能被覆盖......

2 个答案:

答案 0 :(得分:1)

似乎标准.NET树视图没有你所描述的方式:在ExpandAll之前触发标志,处理BeforeExpand并在启用标志时为适当的节点启用e.Cancel。

由于ExpandAll方法不是虚拟的,因此您可以采用以下方法:

  • 从TreeView类继承并添加ExpandAllEx方法,触发此标志。没有一个好的,因为你需要在使用树实例的地方投射到你的树类。
  • 为TreeView类添加扩展方法,其中使用此标志的tree.Tag属性。更有用的方法,只需对现有代码进行最少的更改。

答案 1 :(得分: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