C# &引用;“重影节点”;在System.Windows.Forms.TreeView中?

C# &引用;“重影节点”;在System.Windows.Forms.TreeView中?,c#,winforms,treeview,.net-3.5,C#,Winforms,Treeview,.net 3.5,我有一个名为treeView1的带有TreeView的简单表单,我想在HandleCreated处理程序中添加一些节点,如下所示: using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent();

我有一个名为treeView1的带有
TreeView
的简单表单,我想在
HandleCreated
处理程序中添加一些节点,如下所示:

using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            treeView1.CheckBoxes = true;

            treeView1.HandleCreated += delegate
            {
                // Add one and only one node
                treeView1.Nodes.Add(new TreeNode("A Node"));
            };
        }
    }
}
运行此表单时,实际上有两个节点可见!单击第二个节点上的复选框时,将选中/取消选中第一个节点

有人知道防止这个“鬼节点”的方法吗


我想在
HandleCreated
中添加节点的原因是,该处理程序用于一个线程函数,该函数实际上为要添加的节点构造了一个数据结构。稍后添加节点意味着我必须重新编写大量代码。

这太奇怪了!在我看来像个虫子。。。你应该向网站报告

如果您真的想钩住句柄创建,一个解决方案是从TreeView派生,如下所示,并使用该类而不是标准的TreeView:

public class MyTreeView : TreeView
{
    protected override void OnHandleCreated(EventArgs e)
    {
        base.OnHandleCreated(e);
        Nodes.Add(new TreeNode("A Node"));
    }
}

真奇怪!在我看来像个虫子。。。你应该向网站报告

如果您真的想钩住句柄创建,一个解决方案是从TreeView派生,如下所示,并使用该类而不是标准的TreeView:

public class MyTreeView : TreeView
{
    protected override void OnHandleCreated(EventArgs e)
    {
        base.OnHandleCreated(e);
        Nodes.Add(new TreeNode("A Node"));
    }
}

谢谢,西蒙。不幸的是,我无法从TreeView中派生(它来自另一个来源)。我决定改为切换到VisibleChanged,并确保仅在第一次发生此事件时在节点上工作。似乎HandleCreated是操纵控件的不稳定时刻。我按照你的建议做了,并在connect网站上做了一份报告。我会把微软的人要说的话发到这里。事实上,微软已经感谢你了,西蒙。不幸的是,我无法从TreeView中派生(它来自另一个来源)。我决定改为切换到VisibleChanged,并确保仅在第一次发生此事件时在节点上工作。似乎HandleCreated是操纵控件的不稳定时刻。我按照你的建议做了,并在connect网站上做了一份报告。我会把微软的人说的话贴在这里。事实上微软有