来自其他形式的TreeView节点

时间:2017-04-26 12:45:22

标签: c# treeview

我有一个带有dinamically创建节点的TreeView。

当我关闭另一个表单时,我想从其他表单到达节点。

但它不起作用。

样品:

Form1中

//show the other form (form2)
private void button1_Click(object sender, EventArgs e)
    {
        using (Form1 form1 = new Form1())
        {
            using (Form2 form2 = new Form2(form1))
            {
                form2.StartPosition = FormStartPosition.CenterParent;
                form2.ShowDialog();
            }
        }
    }

    //call this method from other form (form2) when close
    internal void example()
    {
        MessageBox.Show(treeView1.Nodes.Count.ToString());
    }

    //create the nodes
    private void Form1_Load(object sender, EventArgs e)
    {
        TreeNode node = new TreeNode("aaaa");
        treeView1.Nodes.Add(node);
        node = new TreeNode("bbbb");
        treeView1.Nodes.Add(node);
        node = new TreeNode("cccc");
        treeView1.Nodes.Add(node);
    }

窗口2

public partial class Form2 : Form
{
    Form1 form1;

    public Form2(Form1 form1)
    {
        InitializeComponent();

        this.form1 = form1;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.Close();
        form1.example();
    }
}

MessageBox.Show(treeView1.Nodes.Count.ToString());

结果:0

2 个答案:

答案 0 :(得分:1)

问题出在这一行:

using (Form1 form1 = new Form1())

您正在向Form1发送Form2的新实例。您应该发送Form1的当前实例,如下所示:

private void button1_Click(object sender, EventArgs e)
{
    using (Form2 form2 = new Form2(this))
    {
        form2.StartPosition = FormStartPosition.CenterParent;
        form2.ShowDialog();
    }
}

答案 1 :(得分:1)

您构造Form1两次。一次显示带有按钮的表单。按下按钮时,您将创建另一个Form1实例。第二个实例是Form2。但是......永远不会调用第二个实例的Load事件,这意味着它的树永远不会被填充。只有在显示表单时才会调用Load事件,并且永远不会显示此实例。

我建议你按照Nino的回答。

或者......如果你坚持拥有Form1的多个实例,请移动填充树的代码,在Form1的构造函数内,而不是在Load-eventhandler中。