System.Windows.Forms.TreeView中的“Ghost Nodes”?

时间:2011-05-06 08:46:59

标签: c# winforms treeview .net-3.5

我有一个名为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中添加节点的原因是,此处理程序用于线程函数,该函数实际构建要添加的节点的数据结构。稍后添加节点意味着我必须重写我的很多代码。

1 个答案:

答案 0 :(得分:1)

这太奇怪了!看起来像是一个错误...你应该将它报告给connect网站。

如果你真的想要挂钩句柄创建的一个解决方案是从TreeView派生,就像这样,并使用这个类而不是标准的TreeView:

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