TreeNode クラス
アセンブリ: System.Web (system.web.dll 内)


TreeView コントロールはノードで構成されます。ツリー内の各エントリはノードと呼ばれ、TreeNode オブジェクトで表されます。他のノードを格納するノードは親ノードと呼ばれます。他のノードに格納されるノードは子ノードと呼ばれます。子ノードを持たないノードは葉ノードと呼ばれます。他のノードに格納されておらず、他のすべてのノードの先祖となるノードはルート ノードです。ノードは、親と子の両方に該当することがあります。ただし、1 つのノードがルート ノード、親ノード、および葉ノードのうちの 2 つ以上に該当することはありません。ノードの表示と動作に関する一部のプロパティは、ノードがルート、親、葉のどのノードに該当するかによって決定されます。
通常のツリーにはルート ノードが 1 つしかありませんが、TreeView コントロールを使用すると、ツリー構造に複数のルート ノードを追加できます。この機能は、製品カテゴリ一覧のように 1 つのメインのルート ノードを表示せずに項目一覧を表示する場合に便利です。
ノードは、主にデータを Text プロパティと Value プロパティの、2 つのプロパティに格納します。Text プロパティの値は TreeView コントロールに表示されます。Value プロパティは、ポストバック イベントの処理に使用するデータなど、ノードに関する追加データを格納するために使用されます。また、ノードには、そのノードから ValuePath プロパティ内のルート ノードへのパスも格納されます。ValuePath プロパティは、ルート ノードに対するそのノードの相対的な位置を示します。
![]() |
---|
同じレベルにあるノードは、それぞれの Value プロパティの値が一意であることが必要です。同一レベルの複数のノードでこの値が同じであると、TreeView コントロールは各ノードを区別できません。この場合、重複した値を持つノードをユーザーがクリックすると、最初に TreeView コントロールに表示されているノードが選択されます。 |
TreeNode オブジェクトは、次の 4 つのユーザー インターフェイス (UI: User Interface) 要素で構成されます。これらの要素は、カスタマイズしたり、非表示にしたりできます。
TreeView クラスの ExpandImageUrl、CollapseImageUrl、NoExpandImageUrl の各プロパティを設定すると、展開可能、折りたたみ可能、および展開不能の各ノード インジケータにカスタム イメージを指定できます。TreeView クラスの ShowExpandCollapse プロパティを false に設定すると、展開ノード インジケータ アイコンを完全に非表示にできます。
ノードの隣にあるチェック ボックスを表示するには、TreeView クラスの ShowCheckBoxes プロパティを設定します。ShowCheckBoxes プロパティを TreeNodeType.Node 以外の値に設定すると、指定したノード型の隣にチェック ボックスが表示されます。ノードの ShowCheckBox プロパティを設定することによって、各ノードのチェック ボックスを選択的にオーバーライドできます。チェック ボックスが表示されている場合は、Checked プロパティを使用して、そのチェック ボックスが選択されているかどうかを確認します。
ImageUrl プロパティを設定することによって、ノードにイメージを表示できます。このイメージは、ノード テキストの隣に表示されます。
TreeView コントロールのノードのテキストは、2 種類のモード (選択モードとナビゲーション モード) のどちらかで表示できます。既定では、ノードは選択モードになっています。ノードをナビゲーション モードにするには、ノードの NavigateUrl プロパティを空の文字列 ("") 以外の値に設定します。ノードを選択モードにするには、ノードの NavigateUrl プロパティを空の文字列に設定します。
既定では、選択モードのノードをクリックすると、ページがサーバーにポストバックされ、SelectedNodeChanged イベントが発生します。オプションで、ノードの SelectAction プロパティを設定し、別のイベントを指定できます。詳細については、「SelectAction」を参照してください。選択モードでクリックされたノードを確認するには、TreeView コントロールの SelectedNode プロパティを使用します。
ノードがナビゲーション モードの場合、選択項目のすべてのイベントは、そのノードに対して無効になります。ナビゲーション モードのノードをクリックすると、指定された URL に移動します。オプションで Target プロパティを設定し、リンクされた内容が表示されるウィンドウまたは枠を指定できます。
TreeNode クラスには、ノードの状態を格納するために使用される複数のプロパティが格納されます。Selected プロパティを使用して、ノードが選択されているかどうかを確認します。ノードが展開されているかどうかを確認するには、Expanded プロパティを使用します。DataBound プロパティは、ノードがデータにバインドされているかどうかを確認するために使用します。ノードがデータにバインドされている場合、DataItem プロパティを使用して基になるデータにアクセスできます。
クラスには、ツリー内の他のノードに対するそのノードの相対的な位置を確認するための複数のプロパティが用意されています。Depth プロパティを使用して、ノードの深さを確認します。ValuePath プロパティを使用して、現在のノードからルート ノードまでのノードの区切られたリストを取得できます。ノードの親ノードを確認するには、Parent プロパティを使用します。子ノードには、ChildNodes コレクションを使用してアクセスします。
データのサイズやカスタム コンテンツがユーザーの入力に依存する場合もあるため、ツリー構造をあらかじめ静的に定義するのは現実的ではありません。このため、TreeView コントロールは動的なノード ポピュレーションをサポートしています。ノードが展開されている場合、実行時にデータを設定できます。動的なノード ポピュレーションの詳細については、PopulateOnDemand プロパティのトピックを参照してください。
TreeNode のインスタンスの初期プロパティ値の一覧については、TreeNode コンストラクタのトピックを参照してください。

次のコード例にフレームを設定する方法を次のコード例に示します。
<html> <frameset cols="30%, 75%"> <frame name="Menu" src="TreeViewFramevb.aspx"/> <frame name="Content" src="Home.aspx"/> </frameset> </html>
<html> <frameset cols="30%, 75%"> <frame name="Menu" src="TreeViewFramecs.aspx"/> <frame name="Content" src="Home.aspx"/> </frameset> </html>
宣言構文を使用して TreeView コントロールに TreeNode オブジェクトを作成する方法を次のコード例に示します。この例は、前の例のフレームセット内で目次を表示するために使用されます。
<%@ Page Language="VB" %> <html> <body> <form runat="server"> <h3>TreeView Declarative Syntax Example</h3> <asp:TreeView id="SampleTreeView" runat="server"> <Nodes> <asp:TreeNode Value="Home" NavigateUrl="Home.aspx" Text="Home" Target="Content" Expanded="True"> <asp:TreeNode Value="Page 1" NavigateUrl="Page1.aspx" Text="Page1" Target="Content"> <asp:TreeNode Value="Section 1" NavigateUrl="Section1.aspx" Text="Section 1" Target="Content"/> </asp:TreeNode> <asp:TreeNode Value="Page 2" NavigateUrl="Page2.aspx" Text="Page 2" Target="Content"> </asp:TreeNode> </asp:TreeNode> </Nodes> </asp:TreeView> </form> </body> </html>
<%@ Page Language="C#" %> <html> <body> <form runat="server"> <h3>TreeView Declarative Syntax Example</h3> <asp:TreeView id="SampleTreeView" runat="server"> <Nodes> <asp:TreeNode Value="Home" NavigateUrl="Home.aspx" Text="Home" Target="Content" Expanded="True"> <asp:TreeNode Value="Page 1" NavigateUrl="Page1.aspx" Text="Page1" Target="Content"> <asp:TreeNode Value="Section 1" NavigateUrl="Section1.aspx" Text="Section 1" Target="Content"/> </asp:TreeNode> <asp:TreeNode Value="Page 2" NavigateUrl="Page2.aspx" Text="Page 2" Target="Content"> </asp:TreeNode> </asp:TreeNode> </Nodes> </asp:TreeView> </form> </body> </html>


System.Web.UI.WebControls.TreeNode


Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


TreeNode クラス
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)

<SerializableAttribute> _ Public Class TreeNode Inherits MarshalByRefObject Implements ICloneable, ISerializable
[SerializableAttribute] public ref class TreeNode : public MarshalByRefObject, ICloneable, ISerializable

Nodes コレクションには、現在の TreeNode に割り当てられているすべての子 TreeNode オブジェクトが格納されます。TreeNode に対して、追加、削除、またはクローン作成を実行できます。その場合、すべての子ツリー ノードも追加、削除、またはクローン作成されます。各 TreeNode には、他の TreeNode オブジェクトのコレクションを格納できます。このため、コレクションを反復処理するときに、TreeView 内の現在の位置がわかりにくくなる可能性があります。ツリー構造内の位置を確認するには、FullPath プロパティを使用します。FullPath 文字列を解析するときに PathSeparator 文字列値を使用すると、1 つの TreeNode ラベルがどこから始まってどこで終わっているかがわかります。
TreeNode ラベルは、Text プロパティを明示的に設定することによって設定します。別の方法として、Text プロパティを表す文字列パラメータをとる TreeNode コンストラクタの 1 つを使用して、ツリー ノードを作成する方法もあります。TreeNode にイメージが表示される場合、ラベルはそのイメージの横に表示されます。
ツリー ノードの横にイメージを表示するには、親である TreeView コントロールの ImageList プロパティに ImageList を割り当て、ImageList プロパティのインデックス値を参照することによって Image を割り当てます。ImageIndex プロパティには、TreeNode が選択されていないときに表示する Image のインデックス値を設定します。同様に、SelectedImageIndex プロパティには、TreeNode が選択されているときに表示する Image のインデックス値を設定します。
特定のツリー ノードを選択し、Nodes コレクションを反復処理するには、FirstNode、LastNode、NextNode、PrevNode、NextVisibleNode、PrevVisibleNode の各プロパティ値を使用します。これらのプロパティのいずれかによって返された TreeNode を TreeView.SelectedNode プロパティに割り当てると、TreeView コントロールでそのツリー ノードが選択されます。
ツリー ノードを展開して、その次のレベルにある子ツリー ノードを表示できます。TreeNode の横にプラス (+) ボタンが表示されている場合は、ユーザーがそのボタンを押すと TreeNode が展開されます。または、Expand メソッドを呼び出して TreeNode を展開することもできます。Nodes コレクション内のすべての子ツリー ノードのレベルを展開するには、ExpandAll メソッドを呼び出します。Collapse メソッドを呼び出すか、TreeNode の横にマイナス (-) ボタンが表示されている場合はユーザーがそのボタンを押したときに、子レベルの TreeNode が折りたたまれます。Toggle メソッドを呼び出して、TreeNode を展開した状態と折りたたまれた状態を切り替えることもできます。
ツリー ノードには、オプションでチェック ボックスを表示できます。チェック ボックスを表示するには、TreeView の CheckBoxes プロパティを true に設定します。チェックされた状態のツリー ノードについては、Checked プロパティが true に設定されます。
継承時の注意 TreeNode クラスでは ISerializable インターフェイスが実装されるため、シリアル化する派生クラスでもこのインターフェイスと特殊なコンストラクタを実装する必要があります。これについては、「シリアル化のカスタマイズ」で説明しています。
TreeView コントロールに顧客情報を表示するコード例を次に示します。ルート ツリー ノードに顧客名が表示され、各顧客に割り当てられた発注番号が子ツリー ノードに表示されます。この例では、1,000 人の顧客が表示され、顧客ごとに 15 の発注内容が示されます。BeginUpdate メソッドと EndUpdate メソッドを使用すると、TreeView は再描画されません。TreeView が TreeNode オブジェクトを作成して描画する間、待機 Cursor が表示されます。この例では、Order オブジェクトのコレクションを保持できる Customer オブジェクトが存在する必要があります。また、TreeView コントロールのインスタンスが Form 上に作成されている必要もあります。
' Create a new ArrayList to hold the Customer objects. Private customerArray As New ArrayList() Private Sub FillMyTreeView() ' Add customers to the ArrayList of Customer objects. Dim x As Integer For x = 0 To 999 customerArray.Add(New Customer("Customer" + x.ToString())) Next x ' Add orders to each Customer object in the ArrayList. Dim customer1 As Customer For Each customer1 In customerArray Dim y As Integer For y = 0 To 14 customer1.CustomerOrders.Add(New Order("Order" + y.ToString())) Next y Next customer1 ' Display a wait cursor while the TreeNodes are being created. Cursor.Current = New Cursor("MyWait.cur") ' Suppress repainting the TreeView until all the objects have been created. treeView1.BeginUpdate() ' Clear the TreeView each time the method is called. treeView1.Nodes.Clear() ' Add a root TreeNode for each Customer object in the ArrayList. Dim customer2 As Customer For Each customer2 In customerArray treeView1.Nodes.Add(New TreeNode(customer2.CustomerName)) ' Add a child TreeNode for each Order object in the current Customer object. Dim order1 As Order For Each order1 In customer2.CustomerOrders treeView1.Nodes(customerArray.IndexOf(customer2)).Nodes.Add( _ New TreeNode(customer2.CustomerName + "." + order1.OrderID)) Next order1 Next customer2 ' Reset the cursor to the default for all controls. Cursor.Current = System.Windows.Forms.Cursors.Default ' Begin repainting the TreeView. treeView1.EndUpdate() End Sub 'FillMyTreeView
// Create a new ArrayList to hold the Customer objects. private ArrayList customerArray = new ArrayList(); private void FillMyTreeView() { // Add customers to the ArrayList of Customer objects. for(int x=0; x<1000; x++) { customerArray.Add(new Customer("Customer" + x.ToString())); } // Add orders to each Customer object in the ArrayList. foreach(Customer customer1 in customerArray) { for(int y=0; y<15; y++) { customer1.CustomerOrders.Add(new Order("Order" + y.ToString())); } } // Display a wait cursor while the TreeNodes are being created. Cursor.Current = new Cursor("MyWait.cur"); // Suppress repainting the TreeView until all the objects have been created. treeView1.BeginUpdate(); // Clear the TreeView each time the method is called. treeView1.Nodes.Clear(); // Add a root TreeNode for each Customer object in the ArrayList. foreach(Customer customer2 in customerArray) { treeView1.Nodes.Add(new TreeNode(customer2.CustomerName)); // Add a child treenode for each Order object in the current Customer object. foreach(Order order1 in customer2.CustomerOrders) { treeView1.Nodes[customerArray.IndexOf(customer2)].Nodes.Add( new TreeNode(customer2.CustomerName + "." + order1.OrderID)); } } // Reset the cursor to the default for all controls. Cursor.Current = Cursors.Default; // Begin repainting the TreeView. treeView1.EndUpdate(); }
void FillMyTreeView() { // Add customers to the ArrayList of Customer objects. for ( int x = 0; x < 1000; x++ ) { customerArray->Add( gcnew Customer( "Customer " + x ) ); } // Add orders to each Customer object in the ArrayList. IEnumerator^ myEnum = customerArray->GetEnumerator(); while ( myEnum->MoveNext() ) { Customer^ customer1 = safe_cast<Customer^>(myEnum->Current); for ( int y = 0; y < 15; y++ ) { customer1->CustomerOrders->Add( gcnew Order( "Order " + y ) ); } } // Display a wait cursor while the TreeNodes are being created. ::Cursor::Current = gcnew System::Windows::Forms::Cursor( "MyWait.cur" ); // Suppress repainting the TreeView until all the objects have been created. treeView1->BeginUpdate(); // Clear the TreeView each time the method is called. treeView1->Nodes->Clear(); // Add a root TreeNode for each Customer object in the ArrayList. while ( myEnum->MoveNext() ) { Customer^ customer2 = safe_cast<Customer^>(myEnum->Current); treeView1->Nodes->Add( gcnew TreeNode( customer2->CustomerName ) ); // Add a child treenode for each Order object in the current Customer object. IEnumerator^ myEnum = customer2->CustomerOrders->GetEnumerator(); while ( myEnum->MoveNext() ) { Order^ order1 = safe_cast<Order^>(myEnum->Current); treeView1->Nodes[ customerArray->IndexOf( customer2 ) ]->Nodes->Add( gcnew TreeNode( customer2->CustomerName + "." + order1->OrderID ) ); } } // Reset the cursor to the default for all controls. ::Cursor::Current = Cursors::Default; // Begin repainting the TreeView. treeView1->EndUpdate(); }
// Create a new ArrayList to hold the Customer objects. private ArrayList customerArray = new ArrayList(); private void FillMyTreeView() { // Add customers to the ArrayList of Customer objects. for (int x = 0; x < 1000; x++) { customerArray.Add(new Customer("Customer" + ((Int32)x).ToString())); } // Add orders to each Customer object in the ArrayList. for (int iCtr = 0; iCtr < customerArray.get_Count(); iCtr++) { Customer customer1 = (Customer)customerArray.get_Item(iCtr); for (int y = 0; y < 15; y++) { customer1.get_CustomerOrders().Add(new Order("Order" + ((Int32)y).ToString())); } } // Display a wait cursor while the TreeNodes are being created. get_Cursor().set_Current(new Cursor("MyWait.cur")); // Suppress repainting the TreeView until all the objects have // been created. treeView1.BeginUpdate(); // Clear the TreeView each time the method is called. treeView1.get_Nodes().Clear(); // Add a root TreeNode for each Customer object in the ArrayList. for (int iCtr1 = 0; iCtr1 < customerArray.get_Count(); iCtr1++) { Customer customer2 = (Customer)customerArray.get_Item(iCtr1); treeView1.get_Nodes().Add(new TreeNode(customer2.get_CustomerName())); // Add a child treenode for each Order object in the current // Customer object. for (int iCtr2 = 0; iCtr2 < customer2.get_CustomerOrders(). get_Count(); iCtr2++) { Order order1 = (Order)customer2.get_CustomerOrders(). get_Item(iCtr2); treeView1.get_Nodes(). get_Item(customerArray.IndexOf(customer2)).get_Nodes(). Add(new TreeNode(customer2.get_CustomerName() + "." + order1.get_OrderID())); } } // Reset the cursor to the default for all controls. get_Cursor().set_Current(Cursors.get_Default()); // Begin repainting the TreeView. treeView1.EndUpdate(); } //FillMyTreeView

System.MarshalByRefObject
System.Windows.Forms.TreeNode
System.ComponentModel.Design.ObjectSelectorEditor.SelectorNode


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からTreeNode クラスを検索する場合は、下記のリンクをクリックしてください。

- TreeNode クラスのページへのリンク