Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 避免在TreeNode上扩展某些TreeNode节点。ExpandAll?_Winforms_User Interface_Treeview_Treenode - Fatal编程技术网

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

Winforms 避免在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

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

在WinForms
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表示帐户的奉献,根据名称:)