'宣言 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; }