之前没有人问过这个问题:
当用户执行“全部展开”操作时,避免TreeNode
在 WinForms 中展开某些类后代的有效方法是TreeView
什么,但仍让他通过单击 + 符号展开此类节点?
当然我可以处理BeforeExpand
,但我很难设置e.Cancel
只有true
当它是一个ExpandAll
操作时。我想知道如何确定这一点?我可以子类化TreeView
和覆盖ExpandAll
——但不能被覆盖...
之前没有人问过这个问题:
当用户执行“全部展开”操作时,避免TreeNode
在 WinForms 中展开某些类后代的有效方法是TreeView
什么,但仍让他通过单击 + 符号展开此类节点?
当然我可以处理BeforeExpand
,但我很难设置e.Cancel
只有true
当它是一个ExpandAll
操作时。我想知道如何确定这一点?我可以子类化TreeView
和覆盖ExpandAll
——但不能被覆盖...
似乎标准的.NET树视图没有您描述的其他方式:在ExpandAll之前触发标志,处理BeforeExpand并在启用标志时为适当的节点启用e.Cancel。
由于 ExpandAll 方法不是虚拟的,因此您可以遵循以下方法:
这 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