Treeview - 检查节点并不总是触发AfterCheck

时间:2017-06-28 08:25:07

标签: c# treeview treenode

我在运行时构建了一个treeview。

在AfterCheck-Event中,我检查父节点,并选择子节点。

一直检查/取消选中Aftercheck-Event,之后我再次调用Checkstate。

我尝试使用NodeClick-Event解决方法。 NodeClick-Event被调用,但即使在树中检查了node.checked,它仍然是fale。

有关于此的任何想法吗?

 private void treeView_Projekte_AfterCheck(object sender, TreeViewEventArgs e)
    {
        if (!inCheckAll)
            {
                string _debugstring = "*******" + Environment.NewLine;
                _debugstring += "After Check: ";
                if (e.Node.Checked)
                {
                    _debugstring += " Node = checked ";
                }
                else
                {
                    _debugstring += " Node = unchecked ";
                }
                _debugstring += "on Node " + e.Node.Text + " " + DateTime.Now.ToString("hh.mm.ss.ffffff") + Environment.NewLine + Environment.NewLine;
                textBox_Debug.Text += _debugstring;

                if (e.Node.Checked)                                         //Wenn der Node gerade gecheckt wurde (also nicht unchecked)
                {
                    if (e.Node.Parent != null)                              //Wenn ich Eltern habe (Projekt oder WE)
                    {
                        e.Node.Parent.Checked = true;                       //dann Check die auch (geht mit nächstem Checked rekursiv weiter bis keine Eltern mehr da)
                    }
                }

                if (e.Node.Parent != null && e.Node.Parent.Parent == null && Control.ModifierKeys == Keys.Control) //Wenn der Node in der zweiten Ebene steht ist er ein Projekt
                {
                    if (e.Node.Nodes.Count > 0)                            //Wenn das Projekt Kinder bzw. Teilaufgaben hat
                    {
                        inCheckAll = true;                                 //rekusive Endlos-Schleife verhindern
                        foreach (TreeNode Aufgabe_Node in e.Node.Nodes)               //Aufgaben durchlaufen und ebenfalls checken
                        {
                            Aufgabe_Node.Checked = e.Node.Checked;
                            foreach (TreeNode DetailAufgabe_Node in Aufgabe_Node.Nodes)               //Detailaufgaben durchlaufen und ebenfalls checken
                            {
                                DetailAufgabe_Node.Checked = e.Node.Checked;

                            }
                        }
                        inCheckAll = false;
                    }
                }
            }
    }

0 个答案:

没有答案