0

誰も前にそれを尋ねませんでした:

ユーザーが「すべてを展開」したときTreeNodeに、WinFormsで特定のクラスの子孫が展開されないようにする効率的な方法は何ですか?TreeView

確かに は扱えますが、操作の場合のみ に設定するBeforeExpandのは苦労します。どうすればこれを判断できるのだろうか?サブクラス化してオーバーライドできますが、それはオーバーライドできません...e.CanceltrueExpandAllTreeViewExpandAll

4

2 に答える 2

1

標準の.NETツリービューには、説明した以外の方法がないようです.ExpandAllの前にフラグをトリガーし、BeforeExpandを処理し、フラグが有効になっているときに適切なノードに対してe.Cancelを有効にします.

ExpandAll メソッドは仮想ではないため、次の方法があります。

  • TreeView クラスから継承し、このフラグをトリガーする ExpandAllEx メソッドを追加します。ツリーインスタンスを使用するすべての場所でツリークラスにキャストする必要があるため、良いものではありません。
  • このフラグに tree.Tag プロパティを使用する TreeView クラスの拡張メソッドを追加します。既存のコードの変更を最小限に抑えた、より便利な方法。
于 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 に答える