1

選択したツリーノードを上に移動するイベントハンドラーがあります。なぜコメントされたラインでクラッシュするのかわかりません。treeviewdocxmlは、System.Windows.Formsのtreeviewオブジェクトです。

        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();
4

1 に答える 1

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();

[アップデート]

親ノードへの参照も正しくなかったので、例でそれを修正しました。

于 2010-04-21T08:32:56.027 に答える