我有一个事件处理程序,可以移动选定的treenode。我不知道为什么崩溃就行了。 treeviewdocxml是一个treeview对象,来自System.Windows.Forms
treeViewDocXml.BeginUpdate();
TreeNode sourceNode = treeViewDocXml.SelectedNode;
if (sourceNode.Parent == null)
{
return;
}
if (sourceNode.Index > 0)
{
sourceNode.Parent.Nodes.Remove(sourceNode);
sourceNode.Parent.Nodes.Insert(sourceNode.Index - 1, sourceNode); //HERE CRASH
}
treeViewDocXml.EndUpdate();
答案 0 :(得分:4)
这是因为您在从树中删除它后引用sourceNode.Index
。在删除之前尝试将索引存储在变量中:
treeViewDocXml.BeginUpdate();
TreeNode sourceNode = treeViewDocXml.SelectedNode;
if (sourceNode.Parent == null)
{
return;
}
if (sourceNode.Index > 0)
{
var sourceIndex = sourceNode.Index;
var parentNode = sourceNode.Parent;
parentNode.Nodes.Remove(sourceNode);
parentNode.Nodes.Insert(sourceIndex - 1, sourceNode); //HERE CRASH
}
treeViewDocXml.EndUpdate();
<强> [更新] 强>
对父节点的引用也是错误的,所以我在示例中修复了它。