Winforms 避免在TreeNode上扩展某些TreeNode节点。ExpandAll?
以前没有人问过这个问题: 在WinFormsWinforms 避免在TreeNode上扩展某些TreeNode节点。ExpandAll?,winforms,user-interface,treeview,treenode,Winforms,User Interface,Treeview,Treenode,以前没有人问过这个问题: 在WinFormsTreeView中,当用户执行“全部展开”操作,但仍允许他通过单击+符号展开此类节点时,有什么有效的方法可以避免扩展某些TreeNode类子体 当然,我可以在展开之前处理,,但是我很难将e.Cancel设置为true,只有当它是ExpandAll操作时。我想知道我如何才能确定这一点?我可以子类化TreeView并覆盖ExpandAll——但这是无法覆盖的…似乎标准.NET TreeView没有您描述的方式:ExpandAll之前触发标志,ExpandA
TreeView
中,当用户执行“全部展开”操作,但仍允许他通过单击+符号展开此类节点时,有什么有效的方法可以避免扩展某些TreeNode
类子体
当然,我可以在展开之前处理
,,但是我很难将e.Cancel
设置为true
,只有当它是ExpandAll
操作时。我想知道我如何才能确定这一点?我可以子类化TreeView
并覆盖ExpandAll
——但这是无法覆盖的…似乎标准.NET TreeView没有您描述的方式:ExpandAll之前触发标志,ExpandAll之前处理,并在标志启用时为相应节点启用e.取消
由于ExpandAll方法不是虚拟的,您可以采用以下方法:
- 从TreeView类继承,并在触发此标志的位置添加ExpandAllEx方法。这不是一个好方法,因为您需要在使用树实例的任何地方强制转换到树类
- 为TreeView类添加扩展方法,其中使用此标志的tree.Tag属性。在现有代码中进行最小更改的更有用的方法
这是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
简单的问题,没有回答?可能没有我想的那么简单。我对这两个选项都有大致的想法,但是我不知道如何准确地实现它们。扩展方法会做什么?如果用户按下数字键盘上的星号,我如何确保它被触发?同样,如果用户按下星号,我如何确保我的TreeView子代中的ExpandAllEx将被触发,而不是ExpandAll?+1表示帐户的奉献,根据名称:)