Questa pagina è stata utile?
I suggerimenti relativi al contenuto di questa pagina sono importanti. Comunicaceli.
Altri suggerimenti?
1500 caratteri rimanenti
Esporta (0) Stampa
Espandi tutto

Classe TreeView

Visualizza un insieme gerarchico di elementi con etichetta, ciascuno dei quali rappresentato da un oggetto TreeNode.

Spazio dei nomi: System.Windows.Forms
Assembly: System.Windows.Forms (in 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

L'insieme Nodes contiene tutti gli oggetti TreeNode assegnati al controllo TreeView. I nodi della struttura di questo insieme sono noti anche come nodi principali della struttura. Tutti i nodi della struttura aggiunti successivamente a un nodo principale della struttura vengono denominati nodi figli. Poiché ciascun oggetto TreeNode può contenere un insieme di altri oggetti TreeNode, può essere difficile determinare la posizione nella struttura in cui ci si trova quando si scorre un insieme. È possibile analizzare la stringa TreeNode.FullPath utilizzando il valore della stringa PathSeparator per determinare il punto di inizio e fine di un'etichetta di TreeNode.

Per visualizzare delle immagini accanto ai nodi della struttura, assegnare un oggetto ImageList alla proprietà ImageList e fare riferimento al valore di indice di Image in ImageList per assegnare tale oggetto Image. Per assegnare le immagini, utilizzare le seguenti proprietà:

  • Impostare la proprietà ImageIndex sul valore di indice dell'oggetto Image che si desidera visualizzare quando un nodo della struttura non è selezionato.

  • Impostare la proprietà SelectedImageIndex sul valore di indice dell'oggetto Image che si desidera visualizzare quando un nodo della struttura è selezionato.

Le immagini specificate dai valori delle proprietà ImageIndex e SelectedImageIndex sono le immagini predefinite visualizzate da tutti i nodi della struttura assegnati all'insieme Nodes. Per eseguire l'override delle immagini predefinite per singoli nodi della struttura è possibile impostare le proprietà TreeNode.ImageIndex e TreeNode.SelectedImageIndex.

È possibile espandere i nodi della struttura per visualizzare il livello successivo di nodi figlio della struttura. L'utente può espandere l'oggetto TreeNode selezionando il pulsante più (+), se visualizzato, accanto all'oggetto TreeNode oppure espandere l'oggetto TreeNode chiamando il metodo TreeNode.Expand. Per espandere tutti i livelli dei nodi figlio della struttura nell'insieme Nodes, chiamare il metodo ExpandAll. È possibile comprimere il livello figlio di TreeNode chiamando il metodo TreeNode.Collapse oppure selezionando il pulsante meno (-), se visualizzato, accanto all'oggetto TreeNode. Inoltre, è possibile chiamare il metodo TreeNode.Toggle per passare dallo stato esteso a quello compresso e viceversa.

Nei nodi della struttura è possibile visualizzare facoltativamente caselle di controllo. Per visualizzare le caselle di controllo, impostare la proprietà CheckBoxes dell'oggetto TreeView su true. La proprietà Checked è impostata su true per i nodi della struttura il cui stato è di selezione.

NotaNota

Se la proprietà TreeNode.Checked viene impostata dall'evento BeforeCheck o AfterCheck, l'evento verrà generato più volte e potrebbe verificarsi un comportamento imprevisto. È possibile, ad esempio, impostare la proprietà Checked nel gestore eventi mentre si stanno aggiornando ricorsivamente i nodi figlio, in modo che l'utente non debba espanderli e selezionarli uno per uno. Per impedire che l'evento venga generato più volte, aggiungere al gestore eventi istruzioni in base alle quali il codice venga eseguito ricorsivamente solo se la proprietà Action dell'oggetto TreeViewEventArgs non è impostata su TreeViewAction.Unknown. Per una dimostrazione di questa tecnica, vedere la sezione relativa agli esempi degli eventi AfterCheck o BeforeCheck.

È possibile modificare l'aspetto del controllo TreeView impostando alcune delle proprietà di visualizzazione e di stile. L'impostazione della proprietà ShowPlusMinus su true consente di visualizzare il pulsante più (+) o meno (-) accanto a ciascun oggetto TreeNode rispettivamente per espanderlo o comprimerlo. Impostando la proprietà ShowRootLines su true, nel controllo TreeView vengono visualizzate delle linee per collegare tutti i nodi principali della struttura. È possibile visualizzare linee che colleghino i nodi figlio della struttura ai rispettivi nodi principali impostando la proprietà ShowLines su true. Impostando la proprietà HotTracking su true, l'aspetto delle etichette del nodo principale cambia al passaggio del mouse su di esse. Quando intercettate, le etichette del nodo della struttura assumono l'aspetto di un collegamento ipertestuale. È inoltre possibile personalizzare completamente l'aspetto del controllo TreeView. A questo scopo, impostare la proprietà DrawMode su un valore diverso da TreeViewDrawMode.Normal e gestire l'evento DrawNode.

NotaNota

Quando si impostano le proprietà CheckBoxes , Scrollable , ImageIndex e SelectedImageIndex in fase di esecuzione, l'handle di TreeView viene ricreato (vedere Control.RecreateHandle) in modo da aggiornare l'aspetto del controllo. Di conseguenza, tutti i nodi della struttura vengono compressi, ad eccezione dell'oggetto TreeNode selezionato.

Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo del controllo 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();
}

Nell'esempio di codice più complesso riportato di seguito vengono visualizzate informazioni relative ai clienti in un controllo TreeView. Nei nodi principali della struttura sono visualizzati i nomi dei clienti mentre nei nodi figlio della struttura sono visualizzati i numeri di ordine assegnati a ciascun cliente. In questo esempio, vengono visualizzati 1.000 clienti con 15 ordini ciascuno. Per evitare di ridisegnare il controllo TreeView, utilizzare i metodi BeginUpdate e EndUpdate; viene visualizzato un oggetto Cursor di attesa mentre nel controllo TreeView vengono creati e disegnati gli oggetti TreeNode. Per eseguire questo esempio è necessario che si disponga di un oggetto Customer che possa contenere un insieme di oggetti Order. Si richiede inoltre che nella directory dell'applicazione sia presente un file di cursore denominato MyWait.cur e che si sia creata un'istanza di un controllo TreeView su un oggetto 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

I membri statici pubblici (Shared in Visual Basic) di questo tipo sono validi per le operazioni multithreading. I membri di istanza non sono garantiti come thread safe.

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

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.

.NET Framework

Supportato in: 2.0 1.1 1.0

.NET Compact Framework

Supportato in: 2.0 1.0

Aggiunte alla community

AGGIUNGI
Mostra:
© 2015 Microsoft