2017-04-26 66 views
0

我有一个有创建节点的TreeView。从其他形式的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

回答

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(); 
    } 
} 
+0

呃,什么是根本的错误...感谢您的快速答案! – kovak

1

您构建Form1两次。一次用按钮显示表单。当按钮被按下时,您创建Form1的另一个实例。这第二个实例被赋予Form2。但是......第二个实例的Load事件永远不会被调用,这意味着它的树永远不会被填充。 Load事件仅在窗体显示时调用,并且此实例从不显示。

我建议你按照尼诺的答案。

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

+0

upvote for a explanation that I was too lozy to write :) – Nino

+0

谢谢! @Nino没关系,我明白问题是什么。 – kovak