Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

TreeView.CheckBoxes propriété

 

Date de publication : novembre 2016

Obtient ou définit une valeur indiquant si des cases à cocher sont affichées à côté des nœuds d’arbre dans le contrôle arborescence.

Espace de noms:   System.Windows.Forms
Assembly:  System.Windows.Forms (dans System.Windows.Forms.dll)

public bool CheckBoxes { get; set; }

Valeur de propriété

Type: System.Boolean

true Si une case à cocher s’affiche en regard de chaque nœud d’arbre dans le contrôle arborescence ; dans le cas contraire, false. La valeur par défaut est false.

Une case à cocher est affichée à gauche de l’étiquette du nœud d’arborescence et le nœud d’arbre Image, le cas échéant. Cases à cocher Autoriser l’utilisateur à sélectionner plusieurs nœuds d’arborescence à la fois.

Lorsque le CheckBoxes propriété d’un TreeView a la valeur true, et le StateImageList propriété est définie, chaque TreeNode qui est contenue dans le TreeView affiche les première et deuxième images à partir de la StateImageList pour indiquer respectivement un état activé ou désactivé. Toutefois, les images affichées peuvent être différentes si la situation suivante se produit : si le SelectedImageIndex du nœud est défini sur une valeur autre que 0 ou 1 et le CheckBoxes propriété du parent TreeView est définie sur false, le SelectedImageIndex ne redéfinit pas automatiquement la valeur-1 pour indiquer qu’il n’est pas définie. Dans ce cas, l’image d’état à la position d’index indiquée s’affiche. Si CheckBoxes est défini sur true les première et deuxième images de la StateImageList sont affichées pour indiquer respectivement un état activé ou désactivé.

System_CAPS_noteRemarque

Lors de la définition du CheckBoxes propriété au moment de l’exécution, le TreeView handle est recréé (consultez Control.RecreateHandle) pour mettre à jour l’apparence du contrôle. Ainsi, tous les nœuds d’arbre soit réduite, à l’exception du TreeNode.

L’exemple de code suivant montre comment modifier l’état réduit d’un TreeView afin que tous les nœuds activés soient visibles. Tout d’abord, tous les nœuds sont réduits et un gestionnaire est ajouté à la BeforeExpand événement. Ensuite, tous les nœuds sont développés. Le BeforeExpand Gestionnaire d’événements détermine si un nœud donné a des nœuds enfants qui sont activés. Si un nœud n’a pas d’enfants activés, le développement est annulé pour ce nœud. Afin de permettre un développement de nœud standard lors d’un clic sur le signe plus (+) en regard d’un nœud, le BeforeExpand Gestionnaire d’événements est ensuite supprimé.

Ce comportement peut également être implémenté en gérant le BeforeCollapse événement, comme illustré dans l’exemple de cette rubrique.

using System;
using System.Drawing;
using System.Windows.Forms;

public class Form1 : Form
{
    private TreeView treeView1;
    private Button showCheckedNodesButton;
    private TreeViewCancelEventHandler checkForCheckedChildren;

    public Form1()
    {
        treeView1 = new TreeView();
        showCheckedNodesButton = new Button();
        checkForCheckedChildren = 
            new TreeViewCancelEventHandler(CheckForCheckedChildrenHandler);

        this.SuspendLayout();

        // Initialize treeView1.
        treeView1.Location = new Point(0, 25);
        treeView1.Size = new Size(292, 248);
        treeView1.Anchor = AnchorStyles.Top | AnchorStyles.Left | 
            AnchorStyles.Bottom | AnchorStyles.Right;
        treeView1.CheckBoxes = true;

        // Add nodes to treeView1.
        TreeNode node;
        for (int x = 0; x < 3; ++x)
        {
            // Add a root node.
            node = treeView1.Nodes.Add(String.Format("Node{0}", x*4));
            for (int y = 1; y < 4; ++y)
            {
                // Add a node as a child of the previously added node.
                node = node.Nodes.Add(String.Format("Node{0}", x*4 + y));
            }
        }

        // Set the checked state of one of the nodes to
        // demonstrate the showCheckedNodesButton button behavior.
        treeView1.Nodes[1].Nodes[0].Nodes[0].Checked = true;

        // Initialize showCheckedNodesButton.
        showCheckedNodesButton.Size = new Size(144, 24);
        showCheckedNodesButton.Text = "Show Checked Nodes";
        showCheckedNodesButton.Click += 
            new EventHandler(showCheckedNodesButton_Click);

        // Initialize the form.
        this.ClientSize = new Size(292, 273);
        this.Controls.AddRange(new Control[] 
            { showCheckedNodesButton, treeView1 } );

        this.ResumeLayout(false);
    }

    [STAThreadAttribute()]
    static void Main() 
    {
        Application.Run(new Form1());
    }

    private void showCheckedNodesButton_Click(object sender, EventArgs e)
    {
        // Disable redrawing of treeView1 to prevent flickering 
        // while changes are made.
        treeView1.BeginUpdate();

        // Collapse all nodes of treeView1.
        treeView1.CollapseAll();

        // Add the checkForCheckedChildren event handler to the BeforeExpand event.
        treeView1.BeforeExpand += checkForCheckedChildren;

        // Expand all nodes of treeView1. Nodes without checked children are 
        // prevented from expanding by the checkForCheckedChildren event handler.
        treeView1.ExpandAll();

        // Remove the checkForCheckedChildren event handler from the BeforeExpand 
        // event so manual node expansion will work correctly.
        treeView1.BeforeExpand -= checkForCheckedChildren;

        // Enable redrawing of treeView1.
        treeView1.EndUpdate();
    }

    // Prevent expansion of a node that does not have any checked child nodes.
    private void CheckForCheckedChildrenHandler(object sender, 
        TreeViewCancelEventArgs e)
    {
        if (!HasCheckedChildNodes(e.Node)) e.Cancel = true;
    }

    // Returns a value indicating whether the specified 
    // TreeNode has checked child nodes.
    private bool HasCheckedChildNodes(TreeNode node)
    {
        if (node.Nodes.Count == 0) return false;
        foreach (TreeNode childNode in node.Nodes)
        {
            if (childNode.Checked) return true;
            // Recursively check the children of the current child node.
            if (HasCheckedChildNodes(childNode)) return true;
        }
        return false;
    }

}

.NET Framework
Disponible depuis 1.1
Retour au début
Afficher: