0

之前没有人问过这个问题:

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

当然我可以处理BeforeExpand,但我很难设置e.Cancel只有true当它是一个ExpandAll操作时。我想知道如何确定这一点?我可以子类化TreeView和覆盖ExpandAll——但不能被覆盖...

4

2 回答 2

1

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

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

  • 从 TreeView 类继承并添加 ExpandAllEx 方法来触发此标志。没有一个好的,因为您需要在使用树实例的任何地方转换为您的树类。
  • 为 TreeView 类添加一个扩展方法,在该类中使用 tree.Tag 属性作为这个标志。对现有代码进行最小更改的更有用的方法。
于 2011-08-04T10:22:09.877 回答
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
于 2011-08-19T12:36:21.567 回答