我在运行时构建了一个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;
}
}
}
}