我有一个带有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
答案 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中。