循环访问一些treelist复选框节点,并尝试将一些子节点设置为true。当我尝试设置一个时,无论是真还是假,都会导致异常。
'childNode.Checked' threw an exception of type 'System.NullReferenceException'
我错过了一些明显的东西吗?
感谢
private void FluidFilterTree_AfterCheck(object sender, TreeViewEventArgs e)
{
TreeNode ActiveNode = e.Node;
TreeNode childNode = ActiveNode.FirstNode;
if (ActiveNode.Parent == null) // if null it is the parent, check all children
{
for (int x = 0; x < ActiveNode.GetNodeCount(false); x++) // loop through children nodes
{
childNode.Checked = false; //?
childNode = childNode.NextNode;
}
}
MessageBox.Show(e.Node.Text);
}
对象childNode已设置且正在运行,我在该行上有一个断点,它一直有效,直到它尝试设置.checked = true。所以我不确定这是标准的重复“这个异常意味着什么”我理解异常但不确定为什么它在这种情况下是相关的,因为我知道childNode和true都存在
答案 0 :(得分:1)
你假设ActiveNode有孩子。
这不一定是真的。如果没有子节点,则ActiveNode.FirstNode为null,您无法引用Checked属性。
答案 1 :(得分:1)
同意Terry Carmen,你假设childNode永远不会为null。但是,正如您所看到的那样NullReferenceException
被抛出,事实并非如此。怎么样,更安全的例子:
private void FluidFilterTree_AfterCheck(object sender, TreeViewEventArgs e)
{
var activeNode = e.Node;
if (activeNode.Parent == null)
foreach (TreeNode child in activeNode.Nodes)
child.Checked = false;
MessageBox.Show(e.Node.Text);
}
答案 2 :(得分:1)
答案现在看来非常明显。当代码正在执行,并且childNode.checked
被修改时,它再次调用该函数,这次是在更新的节点上,因为这个更新会调用afterchecked
事件。
将其包装在
中if (e.Action.ToString() == "ByMouse")
{
// code here
}
似乎正在工作,并阻止它被多次调用。