0

我目前正在使用 TreeView 来显示文件树,以可视化源代码控制项目的差异。我有一个“Diff”方法,它递归地编辑 TreeView 中根“Nodes”数组中的现有节点,然后更新树。

但是,我遇到了一个问题,即根节点似乎无缘无故地重复,尽管调试器告诉我在 TreeView 的最根节点的“节点”数组中有一个元素,但没有任何错误指示。

我已经尝试使用“ Nodes.Clear()”,然后重新添加有问题的节点,但是即使清除数组,重复项仍然存在(即使Nodes.Count为 0)。我也尝试过使用BeginUpdate()and EndUpdate(),但无济于事。

这是一个 MCVE:

public partial class BrokenControl : TreeView
{
   public BrokenControl()
   {
       InitializeComponent();
   }

   public void Go(object sender, EventArgs e)
   {
       Nodes.Add("Root");
       Nodes[0] = RecursiveEdit(Nodes[0]);
       Update();
   }

   //This function simply recursively edits the Nodes array.
   int iterations = 10;
   private TreeNode RecursiveEdit(TreeNode node)
   {
      node.Nodes.Add(iterations.ToString());
      iterations--;
      if (iterations<=0)
      {
          return node;
      }

      RecursiveEdit(node.Nodes[0]);
      return node;
   }
}

如前所述,我只希望 TreeView 在更新时只有一个节点,但我得到一个包含第一个重复内容的重复节点。

4

1 回答 1

1

我设法通过使用解决方法解决了这个问题:而不是直接操作根节点,保存副本和编辑,然后清除和读取,解决了我的问题。

即使是 0 和 1,仍然不知道是什么导致了欺骗Nodes.Count,但这似乎有效。

更正的 MCVE:

public partial class BrokenControl : TreeView
{
   ...

   public void Go(object sender, EventArgs e)
   {
       Nodes.Add("Root");
       TreeNode savedNode = RecursiveEdit(Nodes[0]);

       //This fixes it.
       Nodes.Clear();
       Nodes.Add(savedNode);

       Update();
   }

   ...
}
于 2019-03-25T10:13:27.603 回答