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]

XML und .NET Überblick

Um auf dem neuesten Wissensstand zu sein, sollten Sie unser aktuelles ASP .NET Komplett Seminar belegen.
Nach dem Seminar kennen Sie die wichtigsten Strömungen in der Software-Technologie

Angular mit ASP.NET Core für .NET-Entwickler

.NET ist Ihnen vertraut, als Entwickler verfügen Sie über einschlägige Kenntnisse. In diesem Kurs lernen Sie nun, Angular in .NET-Umgebungen einzusetzen. Sie verstehen das Konzept von Angular und integrieren das clientseitige JS-Framework sicher in.NET-Anwendungen.

        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!