تحطم في المعالج الذي يتحرك إلى أعلى treenode في Treeview C#
سؤال
لدي معالج أحداث ينقل treenode المحدد. لا أعرف لماذا يتحطم في الخط مع Compated. 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();
المحلول
هذا لأنك تشير 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();
تحديث
كانت الإشارة إلى العقدة الأصل غير صحيحة أيضًا ، لذلك قمت بإصلاح ذلك في المثال.
لا تنتمي إلى StackOverflow