Feedback

C# - TreeNode Checked-Eigenschaft "durchreichen"

Veröffentlicht von am 19.03.2009
(2 Bewertungen)
Dieses allgemein gehaltene Code Snippet ändert die Checked-Eigenschaft der Children und Parents eines TreeNodes nach folgender Mimik:

Checked = true:
- Kinder und Kindes-Kinder: Checked = true
- Vater und Großväter: Checked = true

Checked = false:
- Kinder und Kindes-Kinder: Checked = false
- Vater und Großväter:
- Checked = true wenn mind. ein Kind Checked=true
- Sonst Checked = false.
GFU-Schulungen  [Anzeige]

VB.NET 2017/2015/2013 Einführung

Das Seminar befähigt Sie zur eigenständigen Entwicklung von anwenderorientierten Programmen in VB.NET, worin auch der Einsatz von Datenbanken enthalten ist.

ASP.NET 2.0 und 3.5

Dieser Kurs vermittelt Ihnen alle Erweiterungen von Microsoft ASP.NET 2.0. Zu diesen zählen u. a. Data Bindung, Master Pages, und Security.

        private bool supressAfterCheckEvents = false;

        /// <summary>
        /// Wird ausgelöst, wenn ein Element gewählt wurde
        /// </summary>
        /// <param name="sender">Sender des Events</param>
        /// <param name="e">Event Args</param>
        private void laufTree_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (supressAfterCheckEvents) return;

            supressAfterCheckEvents = true;
            UpdateChildren(e.Node);
            UpdateParent(e.Node);
            supressAfterCheckEvents = false;

            this.ListChanged.Invoke(this, EventArgs.Empty);
        }

        /// <summary>
        /// Ändert die Kinder auf den checked-Status des Vaters
        /// </summary>
        /// <param name="node">Knoten, der geändert wurde</param>
        private void UpdateChildren(TreeNode node)
        {
            foreach (TreeNode treeNode in node.Nodes)
            {
                treeNode.Checked = node.Checked;
                UpdateChildren(treeNode);
            };
        }

        /// <summary>
        /// Akutalisiert den Parent und setzt die Checked-Eigenschaft auf True,
        /// wenn mindestens ein Kind usgewählt wurde
        /// </summary>
        /// <param name="n">Knoten, der geändert wurde</param>
        private void UpdateParent(TreeNode n)
        {
            // Alle Parents auf den Status der Kinder ändern
            TreeNode workingNode = n.Parent;
            while (workingNode != null)
            {
                // Stanadardmäßig deselektiert
                workingNode.Checked = false;

                // Selektieren wenn mindestens ein Knoten ausgewählt wurde
                foreach (TreeNode treeNode in workingNode.Nodes)
                {
                    workingNode.Checked = workingNode.Checked || treeNode.Checked;
                    if (workingNode.Checked) break; // Einmal True ist immer True
                }

                // Neuer Parent ist der Parent des aktuellen Knotens
                workingNode = workingNode.Parent;
            }
        }
Abgelegt unter TreeView, TreeNode, Checked.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!