2010-04-21 46 views
1

我有一個事件處理程序,將選定的treenode向上移動。我不知道爲什麼會崩潰與有問題的路線。 treeviewdocxml是一個TreeView對象,從System.Windows.Forms的崩潰在樹視圖c中移動treenode處理程序#

 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

這是因爲你引用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(); 

[更新]

到父節點的參考是不正確的,以及,所以固定在該例子。