【问题标题】:"Ghost Nodes" in System.Windows.Forms.TreeView?System.Windows.Forms.TreeView 中的“幽灵节点”?
【发布时间】:2011-08-20 00:27:53
【问题描述】:

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

【问题讨论】:

    标签: c# winforms treeview .net-3.5


    【解决方案1】:

    这很奇怪!对我来说似乎是一个错误...您应该将其报告给 connect 网站。

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

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

    【讨论】:

    • 谢谢,西蒙。不幸的是,我不能从 TreeView 派生(它来自另一个来源)。我决定改用 VisibleChanged 并确保仅在此事件第一次发生时才在节点上工作。似乎 HandleCreated 是操纵控件的危险时刻。我按照你的建议做了,并在连接站点上做了报告。我将在这里发布MS家伙必须说的内容。
    • 其实MS有nothing to say
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 2011-11-17
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多