TreeNode (Clase) (System.Windows.Forms)

Cambiar vista:
Sin script
Biblioteca de clases de .NET Framework
TreeNode (Clase)

Actualización: noviembre 2007

Representa un nodo de TreeView.

Espacio de nombres:  System.Windows.Forms
Ensamblado:  System.Windows.Forms (en System.Windows.Forms.dll)
Sintaxis

Visual Basic (Declaración)
<SerializableAttribute> _
<TypeConverterAttribute(GetType(TreeNodeConverter))> _
Public Class TreeNode _
	Inherits MarshalByRefObject _
	Implements ICloneable, ISerializable
Visual Basic (Uso)
Dim instance As TreeNode
C#
[SerializableAttribute]
[TypeConverterAttribute(typeof(TreeNodeConverter))]
public class TreeNode : MarshalByRefObject, ICloneable, 
	ISerializable
Visual C++
[SerializableAttribute]
[TypeConverterAttribute(typeof(TreeNodeConverter))]
public ref class TreeNode : public MarshalByRefObject, 
	ICloneable, ISerializable
J#
/** @attribute SerializableAttribute */ 
/** @attribute TypeConverterAttribute(TreeNodeConverter) */
public class TreeNode extends MarshalByRefObject implements ICloneable, 
	ISerializable
JScript
public class TreeNode extends MarshalByRefObject implements ICloneable, ISerializable
Comentarios

La colección de Nodes contiene todos los objetos TreeNode secundarios asignados al actual objeto TreeNode. Al agregar, quitar o clonar un objeto TreeNode, se agregan, quitan o clonan todos los nodos de árbol secundarios. Cada TreeNode puede contener una colección de otros objetos TreeNode. Debido a esto, puede resultar difícil determinar si se encuentra en la vista TreeView al recorrer en iteración la colección. Para determinar su ubicación en una estructura de árbol, utilice la propiedad FullPath. La cadena FullPath se puede analizar mediante el valor de cadena de la propiedad PathSeparator para determinar dónde empieza y termina una etiqueta de TreeNode.

La etiqueta de TreeNode se establece al establecer explícitamente la propiedad Text. Asimismo, se puede crear el nodo de árbol mediante uno de los constructores de TreeNode que tiene un parámetro de cadena que representa la propiedad Text. La etiqueta se muestra junto a la imagen de TreeNode, si aparece alguna.

Para mostrar imágenes junto a los nodos de árbol, asigne un objeto ImageList a la propiedad ImageList del control TreeView primario y asigne un objeto Image mediante una referencia a su valor de índice en la propiedad de ImageList. Establezca la propiedad ImageIndex en el valor de índice del objeto Image que desee mostrar cuando TreeNode se encuentre sin seleccionar. De forma similar, establezca la propiedad SelectedImageIndex en el valor de índice del objeto Image que desee mostrar cuando esté seleccionado el objeto TreeNode.

Para seleccionar nodos de árbol específicos y recorrer en iteración la colección de Nodes, utilice los siguientes valores de propiedad: FirstNode, LastNode, NextNode, PrevNode, NextVisibleNode y PrevVisibleNode. Asigne el TreeNode devuelto por una de las propiedades mencionadas anteriormente a la propiedad TreeView.SelectedNode para seleccionar ese nodo de árbol en el control TreeView.

Los nodos de árbol se pueden expandir para mostrar el siguiente nivel de nodos de árbol secundarios. El usuario puede expandir el objeto TreeNode presionando el botón del signo más (+) situado junto al objeto TreeNode, si aparece alguno, o puede expandir el objeto TreeNode llamando al método Expand. Para expandir todos los niveles de nodos de árbol secundarios en la colección de Nodes, llame al método ExpandAll. Para contraer el nivel de TreeNode secundario, llame al método Collapse o presione el botón del signo menos (-) situado junto al objeto TreeNode, en caso de que se muestre alguno. También puede llamar al método Toggle para alternar entre el estado expandido y contraído de TreeNode.

De manera opcional, los nodos de árbol pueden mostrar una casilla. Para mostrar casillas, establezca la propiedad CheckBoxes de la TreeView en true. La propiedad Checked se establece en true para nodos de árbol en estado activado.

Notas para los herederos:

Dado que la clase TreeNode implementa la interfaz ISerializable, las clases derivadas pensadas para ser serializables también deben implementar esta interfaz y los constructores especiales tal como se describe en Serialización personalizada.

Ejemplos

En el ejemplo de código siguiente, se muestra la información de los clientes en un control TreeView. Los nodos de árbol raíz muestran los nombres de los clientes y los nodos secundarios muestran los números de pedido asignados a cada cliente. En este ejemplo, se muestran 1.000 clientes con 15 pedidos cada uno. Para impedir que TreeView vuelva a dibujarse, se utilizan los métodos BeginUpdate y EndUpdate, y se muestra un Cursor de espera mientras TreeView crea y dibuja los objetos TreeNode. En este ejemplo se requiere que haya un objeto Customer que pueda contener una colección de objetos Order. También se requiere que se haya creado una instancia de un control TreeView en Form.

Visual Basic
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 'End Customer class


Public Class Order
   Inherits [Object]
   Private ordID As String

   Public Sub New(ByVal orderid As String)
      Me.ordID = orderid
   End Sub 'New

   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 ' End Order 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 'FillMyTreeView


C#

// 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();
}


Visual C++
// 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();
}


J#

// The basic Customer class.
public class Customer extends Object
{
    private String custName = "";
    protected ArrayList custOrders = new ArrayList();

    public Customer(String customername)
    {
        this.custName = customername;
    } //Customer

    /** @property 
     */
    public String get_CustomerName()
    {
        return this.custName;
    } //get_CustomerName

    /** @property 
     */
    public void set_CustomerName(String value)
    {
        this.custName = value;
    } //set_CustomerName

    /** @property 
     */
    public ArrayList get_CustomerOrders()
    {
        return this.custOrders;
    } //get_CustomerOrders
} //End Customer class

// The basic customer Order class.
public class Order extends Object
{
    private String ordID = "";

    public Order(String orderid)
    {
        this.ordID = orderid;
    } //Order

    /** @property 
     */
    public String get_OrderID()
    {
        return this.ordID;
    } //get_OrderID

    /** @property 
     */
    public void set_OrderID(String value)
    {
        this.ordID = value;
    } //set_OrderID
} // 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"
            + ((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


Jerarquía de herencia

System.Object
  System.MarshalByRefObject
    System.Windows.Forms.TreeNode
      System.ComponentModel.Design.ObjectSelectorEditor.SelectorNode
      System.Workflow.ComponentModel.Design.WorkflowOutlineNode
Seguridad para subprocesos

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.
Plataformas

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Información de versión

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0
Vea también

Referencia

Otros recursos