TreeNode 类 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示 TreeView 的节点。
public ref class TreeNode : MarshalByRefObject, ICloneable, System::Runtime::Serialization::ISerializable[System.ComponentModel.TypeConverter(typeof(System.Windows.Forms.TreeNodeConverter))]
[System.Serializable]
public class TreeNode : MarshalByRefObject, ICloneable, System.Runtime.Serialization.ISerializable[<System.ComponentModel.TypeConverter(typeof(System.Windows.Forms.TreeNodeConverter))>]
[<System.Serializable>]
type TreeNode = class
    inherit MarshalByRefObject
    interface ICloneable
    interface ISerializablePublic Class TreeNode
Inherits MarshalByRefObject
Implements ICloneable, ISerializable- 继承
- 派生
- 属性
- 实现
示例
下面的代码示例在 控件中 TreeView 显示客户信息。 根树节点显示客户名称,子树节点显示分配给每个客户的订单号。 在此示例中,将显示 1,000 个客户,每个客户有 15 个订单。 使用 和 方法取消重绘TreeView,并在 创建和绘制TreeNode对象时TreeView显示等待Cursor。EndUpdateBeginUpdate 此示例要求你有一个 Customer 可以保存 对象集合的 Order 对象。 它还要求已在 上Form创建了 控件的TreeView实例。
// The basic Customer class.
ref class Customer: public System::Object
{
private:
   String^ custName;
protected:
   ArrayList^ custOrders;
public:
   Customer( String^ customername )
   {
      custName = "";
      custOrders = gcnew ArrayList;
      this->custName = customername;
   }
   property String^ CustomerName 
   {
      String^ get()
      {
         return this->custName;
      }
      void set( String^ value )
      {
         this->custName = value;
      }
   }
   property ArrayList^ CustomerOrders 
   {
      ArrayList^ get()
      {
         return this->custOrders;
      }
   }
};
// End Customer class
// The basic customer Order class.
ref class Order: public System::Object
{
private:
   String^ ordID;
public:
   Order( String^ orderid )
   {
      ordID = "";
      this->ordID = orderid;
   }
   property String^ OrderID 
   {
      String^ get()
      {
         return this->ordID;
      }
      void set( String^ value )
      {
         this->ordID = value;
      }
   }
};
// End Order class
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.
   myEnum = customerArray->GetEnumerator();
   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();
}
// The basic Customer class.
public class Customer : System.Object
{
   private string custName = "";
   protected ArrayList custOrders = new ArrayList();
   public Customer(string customername)
   {
      this.custName = customername;
   }
   public string CustomerName
   {      
      get{return this.custName;}
      set{this.custName = value;}
   }
   public ArrayList CustomerOrders 
   {
      get{return this.custOrders;}
   }
} // End Customer class 
// The basic customer Order class.
public class Order : System.Object
{
   private string ordID = "";
   public Order(string orderid)
   {
      this.ordID = orderid;
   }
   public string OrderID
   {      
      get{return this.ordID;}
      set{this.ordID = value;}
   }
} // End Order class
// 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();
}
Public Class Customer
   Inherits [Object]
   Private custName As String = ""
   Friend custOrders As New ArrayList()
   Public Sub New(ByVal customername As String)
      Me.custName = customername
   End Sub
   Public Property CustomerName() As String
      Get
         Return Me.custName
      End Get
      Set(ByVal Value As String)
         Me.custName = Value
      End Set
   End Property
   Public ReadOnly Property CustomerOrders() As ArrayList
      Get
         Return Me.custOrders
      End Get
   End Property
End Class
Public Class Order
   Inherits [Object]
   Private ordID As String
   Public Sub New(ByVal orderid As String)
      Me.ordID = orderid
   End Sub
   Public Property OrderID() As String
      Get
         Return Me.ordID
      End Get
      Set(ByVal Value As String)
         Me.ordID = Value
      End Set
   End Property
End Class
' 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
注解
集合Nodes包含分配给当前 TreeNode的所有子TreeNode对象。 可以添加、删除或克隆 TreeNode;执行此操作时,将添加、删除或克隆所有子树节点。 每个都可以 TreeNode 包含其他 TreeNode 对象的集合。 这会使在循环访问集合时很难确定你在 TreeView 中的位置。 若要确定树结构中的位置,请使用 FullPath 属性。 FullPath可以使用字符串值分析字符串,PathSeparator以确定标签的开始和结束位置TreeNode。
通过 TreeNode 显式设置 属性来 Text 设置标签。 替代方法是使用具有表示Text属性的字符串参数的构造函数之TreeNode一创建树节点。 标签显示在图像旁边 TreeNode (如果显示)。
若要在树节点旁边显示图像,请将 分配给ImageList父控件的 属性,并通过在 属性中ImageList引用其索引值来分配 Image 。TreeViewImageList 将 ImageIndex 属性设置为在 处于未选中状态时TreeNode要显示的 的索引值Image。 同样,将 SelectedImageIndex 属性设置为在选择 时TreeNode要显示的 的索引值Image。
可以通过使用以下属性值选择特定的树节点并循环访问Nodes集合:FirstNode、、LastNode、NextNode、PrevNodeNextVisibleNode、 PrevVisibleNode。 TreeNode将上述属性之一返回的 分配给 属性,TreeView.SelectedNode以在 控件中选择TreeView该树节点。
树节点可以展开以显示下一级别的子树节点。 用户可以通过TreeNode按 旁边的TreeNode加号 (+) 按钮(如果显示)来展开 ,也可以通过调用 Expand 方法展开 TreeNode 。 若要展开集合中的所有 Nodes 子树节点级别,请 ExpandAll 调用 方法。 可以通过调用 Collapse 方法折叠子TreeNode级别,或者用户可以按 旁边的减 () 按钮TreeNode(如果显示)。 还可以调用 方法, Toggle 在展开状态和折叠状态之间交替 TreeNode 。
树节点可以选择显示复选框。 若要显示复选框,请将 的 属性设置为 CheckBoxestrue。TreeView 对于处于选中状态的树节点,属性 Checked 设置为 true 。
构造函数
| TreeNode() | 初始化 TreeNode 类的新实例。 | 
| TreeNode(SerializationInfo, StreamingContext) | 使用指定的序列化信息和上下文初始化 TreeNode 类的新实例。 | 
| TreeNode(String) | 用指定的标签文本初始化 TreeNode 类的新实例。 | 
| TreeNode(String, Int32, Int32) | 用指定的标签文本以及树节点处于选定和未选定状态时所显示的图像来初始化 TreeNode 类的新实例。 | 
| TreeNode(String, Int32, Int32, TreeNode[]) | 用指定的标签文本、子树节点以及树节点处于选定和未选定状态时所显示的图像来初始化 TreeNode 类的新实例。 | 
| TreeNode(String, TreeNode[]) | 用指定的标签文本和子树节点初始化 TreeNode 类的新实例。 | 
属性
| BackColor | 获取或设置树节点的背景色。 | 
| Bounds | 获取树节点的界限。 | 
| Checked | 获取或设置一个值,用以指示树节点是否处于选中状态。 | 
| ContextMenu | 获取与此树节点关联的快捷菜单。 | 
| ContextMenuStrip | 获取或设置与此树节点关联的快捷菜单。 | 
| FirstNode | 获取树节点集合中的第一个子树节点。 | 
| ForeColor | 获取或设置树节点的前景色。 | 
| FullPath | 设置从根树节点到当前树节点的路径。 | 
| Handle | 获取树节点的句柄。 | 
| ImageIndex | 获取或设置当树节点处于未选定状态时所显示图像的图像列表索引值。 | 
| ImageKey | 获取或设置此树节点处于未选中状态时与其关联的图像的键。 | 
| Index | 获取树节点在树节点集合中的位置。 | 
| IsEditing | 获取一个值,用以指示树节点是否处于可编辑状态。 | 
| IsExpanded | 获取一个值,用以指示树节点是否处于可展开状态。 | 
| IsSelected | 获取一个值,用以指示树节点是否处于选定状态。 | 
| IsVisible | 获取一个值,用以指示树节点是否是完全可见或部分可见。 | 
| LastNode | 获取最后一个子树节点。 | 
| Level | 获取 TreeView 控件中的树视图的深度(从零开始)。 | 
| Name | 获取或设置树节点的名称。 | 
| NextNode | 获取下一个同级树节点。 | 
| NextVisibleNode | 获取下一个可见树节点。 | 
| NodeFont | 获取或设置用于显示树节点标签文本的字体。 | 
| Nodes | 获取分配给当前树节点的 TreeNode 对象的集合。 | 
| Parent | 获取当前树节点的父树节点。 | 
| PrevNode | 获取上一个同级树节点。 | 
| PrevVisibleNode | 获取上一个可见树节点。 | 
| SelectedImageIndex | 获取或设置当树节点处于选定状态时所显示的图像的图像列表索引值。 | 
| SelectedImageKey | 获取或设置当树节点处于选中状态时显示在该节点中的图像的键。 | 
| StateImageIndex | 获取或设置图像的索引,该图像用于在父 TreeNode 的 TreeView 属性设置为  | 
| StateImageKey | 获取或设置图像的键,该图像用于在父 TreeNode 的 TreeView 属性设置为  | 
| Tag | 获取或设置包含树节点有关数据的对象。 | 
| Text | 获取或设置在树节点标签中显示的文本。 | 
| ToolTipText | 获取或设置当鼠标指针悬停于 TreeNode 之上时显示的文本。 | 
| TreeView | 获取树节点分配到的父树视图。 | 
方法
显式接口实现
| ISerializable.GetObjectData(SerializationInfo, StreamingContext) | 使用序列化 TreeNode 时所需的数据填充序列化信息对象。 |