Exportar (0) Imprimir
Expandir todo

TreeView (Clase)

Muestra una colección jerárquica de elementos con etiquetas, representado cada uno por un TreeNode.

Espacio de nombres: System.Windows.Forms
Ensamblado: System.Windows.Forms (en system.windows.forms.dll)

[ComVisibleAttribute(true)] 
[ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)] 
public class TreeView : Control
/** @attribute ComVisibleAttribute(true) */ 
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch) */ 
public class TreeView extends Control
ComVisibleAttribute(true) 
ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch) 
public class TreeView extends Control
No aplicable.

La colección Nodes contiene todos los objetos TreeNode asignados al control TreeView. A los nodos de árbol de esta colección se les conoce como los nodos de árbol raíz. Cualquier nodo de árbol que se agregue posteriormente a un nodo de árbol raíz se conoce como nodo secundario. Como cada TreeNode puede contener una colección de otros objetos TreeNode, puede ser difícil determinar la ubicación en la estructura de árbol cuando se recorre la colección en iteración. Se puede analizar la cadena TreeNode.FullPath usando el valor de la cadena PathSeparator para determinar dónde empieza y termina una etiqueta TreeNode.

Se pueden mostrar imágenes junto a los nodos del árbol asignando un ImageList a la propiedad ImageList y haciendo referencia al valor de índice de una Image de ImageList para asignar esa Image. Utilice las propiedades siguientes para asignar las imágenes:

  • Establezca la propiedad ImageIndex en el valor de índice de la Image que desea que se muestre cuando no esté seleccionado un nodo de árbol.

  • Establezca la propiedad SelectedImageIndex en el valor de índice de la Image que desea que se muestre cuando no esté seleccionado un nodo de árbol.

Las imágenes a las que hacen referencia los valores de las propiedades ImageIndex y SelectedImageIndex son las imágenes predeterminadas que muestran todos los nodos de árbol asignados a la colección Nodes. Los nodos de árbol individuales pueden reemplazar las imágenes predeterminadas estableciendo las propiedades TreeNode.ImageIndex y TreeNode.SelectedImageIndex.

Los nodos de árbol se pueden expandir para mostrar el siguiente nivel de nodos de árbol secundarios. El usuario puede expandir el TreeNode haciendo clic en el botón con el signo más (+), si se muestra al lado del TreeNode, o se puede expandir el TreeNode llamando al método TreeNode.Expand. Para expandir todos los niveles de nodos de árbol secundarios de la colección Nodes, llame al método ExpandAll. El nivel secundario del TreeNode se puede contraer llamando al método TreeNode.Collapse, o el usuario puede presionar el botón con el signo menos (-) si se muestra al lado del TreeNode. También se puede llamar al método TreeNode.Toggle para alternar los estados de árbol expandido y contraído.

Si se desea, los nodos de árbol pueden mostrar casillas de verificación. Para mostrar casillas de verificación, establezca la propiedad CheckBoxes de la TreeView en true. La propiedad Checked se establece en true para nodos de árbol en estado activado.

NotaNota:

Si la propiedad TreeNode.Checked se establece desde el evento BeforeCheck o AfterCheck, el evento se provoca varias veces y puede producirse un comportamiento imprevisto. Por ejemplo, la propiedad Checked puede establecerse en el controlador de eventos cuando los nodos secundarios se están actualizando de forma recursiva, de forma que el usuario no tenga que expandir y comprobar cada uno de los nodos uno por uno. Para evitar que el evento se provoque varias veces, hay que agregar lógica al controlador de eventos para que sólo ejecute el código recursivo si la propiedad Action de TreeViewEventArgs no está establecida en TreeViewAction.Unknown. Para obtener un ejemplo sobre la forma de realizar esta operación, vea la sección Ejemplo de los eventos AfterCheck o BeforeCheck.

La apariencia del control TreeView se puede cambiar estableciendo algunas de sus propiedades de presentación y estilo. Si se establece ShowPlusMinus en true, se muestra un botón con el signo más (+) o con el signo menos (-) junto a cada TreeNode que se puede expandir o contraer, según corresponda. Si se establece la propiedad ShowRootLines en true, la TreeView muestra líneas que unen entre sí todos los nodos de árbol raíz. Se pueden mostrar líneas que unan los nodos de árbol secundarios con su correspondiente nodo raíz estableciendo la propiedad ShowLines en true. Si se establece la propiedad HotTracking en true, cambia la apariencia de las etiquetas de nodo de árbol cuando el puntero del mouse pasa sobre ellas. Cuando se hace un seguimiento completo de las etiquetas de los nodos de árbol, dichas etiquetas tienen el aspecto de un hipervínculo. También se puede personalizar totalmente la apariencia del control TreeView. Para ello, establezca la propiedad DrawMode en un valor distinto de TreeViewDrawMode.Normal y controle el evento DrawNode.

NotaNota:

Si se establecen las propiedades CheckBoxes, Scrollable, ImageIndex y SelectedImageIndex en tiempo de ejecución, se vuelve a crear el identificador TreeView (vea Control.RecreateHandle) para que se actualice la apariencia del control. Esto hace que se contraigan todos los nodos de árbol, con excepción del TreeNode seleccionado.

En el siguiente código de ejemplo se muestra el uso del control TreeView.

// Populates a TreeView control with example nodes. 
private void InitializeTreeView()
{
    treeView1.BeginUpdate();
    treeView1.Nodes.Add("Parent");
    treeView1.Nodes[0].Nodes.Add("Child 1");
    treeView1.Nodes[0].Nodes.Add("Child 2");
    treeView1.Nodes[0].Nodes[1].Nodes.Add("Grandchild");
    treeView1.Nodes[0].Nodes[1].Nodes[0].Nodes.Add("Great Grandchild");
    treeView1.EndUpdate();
}

En el ejemplo de código siguiente, más complejo, se muestra información de los clientes en un control TreeView. Los nodos del á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 haya un archivo de cursor denominado MyWait.cur en el directorio de la aplicación y que se haya creado una instancia de un control TreeView en un Form.

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

// 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

Los miembros estáticos públicos (Shared en Visual Basic) 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.

Windows 98, Windows 2000 Service Pack 4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 2.0, 1.0
Mostrar:
© 2014 Microsoft