C# 在treeview c中向上移动treenode的处理程序中发生崩溃
我有一个事件处理程序,可以向上移动所选树节点。我不知道为什么crash和comented是一致的。 treeviewdocxml是System.Windows.Forms中的treeview对象C# 在treeview c中向上移动treenode的处理程序中发生崩溃,c#,winforms,treeview,treenode,C#,Winforms,Treeview,Treenode,我有一个事件处理程序,可以向上移动所选树节点。我不知道为什么crash和comented是一致的。 treeviewdocxml是System.Windows.Forms中的treeview对象 treeViewDocXml.BeginUpdate(); TreeNode sourceNode = treeViewDocXml.SelectedNode; if (sourceNode.Parent == null) {
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();
这是因为在将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();
[更新]
对父节点的引用也不正确,因此我在示例中修复了该问题。这是因为您在将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();
[更新]
对父节点的引用也不正确,所以我在示例中修复了这个问题