バージョン

IncludeCollapsedDescendantsOnRangeSelection プロパティ (UltraTree)

これらの縮小されたノードが範囲選択の最初のノードと最後のノードの間にある時に縮小されたノードの子孫が選択されるかどうかを決定する値を取得または設定します。SelectionBehavior プロパティが 'UseOverride' 以外の値に設定される時に限り適用可能です。
シンタックス
'宣言
 
Public Property IncludeCollapsedDescendantsOnRangeSelection As Infragistics.Win.DefaultableBoolean
public Infragistics.Win.DefaultableBoolean IncludeCollapsedDescendantsOnRangeSelection {get; set;}
解説

IncludeCollapsedDescendantsOnRangeSelection プロパティの値は、範囲 (隣接とも言う) 選択、つまりユーザーが System.Windows.Forms.Keys.Shift キーを押している間にノードをクリックする、またはマウスをドラッグすることで選択する時に限って適用可能です。

データ バインドされたノードが範囲選択の一部で、IncludeCollapsedDescendantsOnRangeSelection が True に設定される場合、そのノードを選択する動作は Nodes コレクションの移植だけでなくその子孫の移植をトリガーします。

デフォルトで、祖先ノードが縮小されているためにユーザー インターフェイスに表示されないノードは範囲選択に含まれません。IncludeCollapsedDescendantsOnRangeSelection プロパティを True に設定するとこの動作を変更します。これによって範囲選択の各ノードのすべての子孫 (最後の子孫を除く) は祖先とともに選択されます。

ユーザーが Shift キーを押している間にノードをクリックすることで範囲選択をする場合に、クリックされたノードの子孫は選択されません。つまりクリックされたノードは常に選択範囲では最後のノードです。これはドラッグ選択操作でドラッグされる最後のノードでも当てはまります。

BeforeSelectEventArgs.IncludeCollapsedDescendantsOnRangeSelection プロパティを設定することによって、BeforeSelect イベントのリスナーは IncludeCollapsedDescendantsOnRangeSelection プロパティによって発生した動作をオーバーライドできます。コントロールレベルの IncludeCollapsedDescendantsOnRangeSelection プロパティが True に設定されると、イベント ハンドラーに渡された BeforeSelectEventArgs.NewSelections コレクションは縮小されたノードの子孫のみを含むことに注意してください。

使用例
Imports System.Collections.Generic
Imports Infragistics.Win
Imports Infragistics.Win.Misc.UltraWinTree

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '  Set the SelectionBehavior property to 'ExtendedAcrossCollections'
        '  to allow nodes from different collections to be selected concurrently.
        Me.ultraTree1.SelectionBehavior = SelectionBehavior.ExtendedAcrossCollections

        '  Add nodes to the tree
        Me.PopulateTree(Me.ultraTree1)

        '  Determine the deepest level 
        Dim deepestLevel As Integer = Me.GetDeepestLevel(Me.ultraTree1)

        '  Only allow selection of leaf nodes
        Me.AllowSelectionOnLevel(Me.ultraTree1, deepestLevel)
    End Sub

    Private Sub PopulateTree(ByVal treeControl As UltraTree)
        Try

            treeControl.BeginUpdate()
            treeControl.Nodes.Clear()

            Dim i As Integer
            For i = 0 To 2

                Dim text As String = String.Format("Root {0}", i)
                Dim rootNode As UltraTreeNode = treeControl.Nodes.Add(Nothing, text)
                Me.PopulateNodes(rootNode.Nodes, 1)
            Next

        Finally
            treeControl.EndUpdate()
        End Try

        treeControl.ExpandAll()

    End Sub

    Private Sub PopulateNodes(ByVal nodesCollection As TreeNodesCollection, ByVal level As Integer)

        If (level > 3) Then Return

        Dim parentNode As UltraTreeNode = nodesCollection.ParentNode

        Dim i As Integer
        For i = 0 To 2

            Dim text As String = String.Format("{0}\Node {1}", parentNode.Text, i)
            Dim node As UltraTreeNode = nodesCollection.Add(Nothing, text)

            If (level < 3) Then
                Me.PopulateNodes(node.Nodes, level + 1)
            End If
        Next

    End Sub


    Private Sub ultraTree1_BeforeSelect(ByVal sender As System.Object, ByVal e As BeforeSelectEventArgs) Handles ultraTree1.BeforeSelect
        '  Iterate the members of the new selection and check
        '  the level of each node to determine which levels are
        '  included in the selection.
        Dim selectedNodes As SelectedNodesCollection = e.NewSelections
        Dim levels As New List(Of Integer)
        Dim i As Integer
        For i = 0 To selectedNodes.Count - 1

            Dim node As UltraTreeNode = selectedNodes(i)

            Dim level As Integer = node.Level
            If levels.Contains(level) = False Then levels.Add(level)
        Next

        '  If there are no root level nodes selected, allow descendants
        '  of collapsed nodes to be selected.
        If (levels.Contains(0) = False) Then
            e.IncludeCollapsedDescendantsOnRangeSelection = True
        End If

    End Sub
using System.Collections.Generic;
using Infragistics.Win;
using Infragistics.Win.Misc.UltraWinTree;

    private void Form1_Load(object sender, EventArgs e)
    {
        //  Set the SelectionBehavior property to 'ExtendedAcrossCollections'
        //  to allow nodes from different collections to be selected concurrently.
        this.ultraTree1.SelectionBehavior = SelectionBehavior.ExtendedAcrossCollections;

        //  Set the IncludeCollapsedDescendantsOnRangeSelection property to false
        //  so that descendants of collapsed nodes are not selected by default.
        this.ultraTree1.IncludeCollapsedDescendantsOnRangeSelection = DefaultableBoolean.False;

        //  Add nodes to the tree
        this.PopulateTree( this.ultraTree1 );
    }

    private void PopulateTree( UltraTree treeControl, bool expandAll )
    {
        try
        {
            treeControl.BeginUpdate();

            treeControl.Nodes.Clear();

            for ( int i = 0; i < 3; i ++ )
            {
                string text = string.Format( "Root {0}", i );
                UltraTreeNode rootNode = treeControl.Nodes.Add( null, text );
                this.PopulateNodes( rootNode.Nodes, 1 );
            }

            if ( expandAll )
                this.ultraTree1.ExpandAll();
        }
        finally
        {
            treeControl.EndUpdate();
        }
    }

    private void PopulateNodes( TreeNodesCollection nodesCollection, int level )
    {
        if ( level > 3 )
            return;

        UltraTreeNode parentNode = nodesCollection.ParentNode;

        for ( int i = 0; i < 3; i ++ )
        {
            string text = string.Format( @"{0}\Node {1}", parentNode.Text, i );
            UltraTreeNode node = nodesCollection.Add( null, text );
            
            if ( level < 3 )
                this.PopulateNodes( node.Nodes, level + 1 );
        }            
    }

    private void ultraTree1_BeforeSelect(object sender, BeforeSelectEventArgs e)
    {
        //  Iterate the members of the new selection and check
        //  the level of each node to determine which levels are
        //  included in the selection.
        SelectedNodesCollection selectedNodes = e.NewSelections;
        List<int> levels = new List<int>();
        for ( int i = 0; i < selectedNodes.Count; i ++ )
        {
            UltraTreeNode node = selectedNodes[i];

            int level = node.Level;
            if ( levels.Contains(level) == false )
                levels.Add(level);
        }

        //  If there are no root level nodes selected, allow descendants
        //  of collapsed nodes to be selected.
        if ( levels.Contains(0) == false )
            e.IncludeCollapsedDescendantsOnRangeSelection = true;
    }
参照