【问题标题】:TreeView nodes from other form其他形式的 TreeView 节点
【发布时间】:2017-04-26 21:06:58
【问题描述】:

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

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

但它不起作用。

示例:

表格1

//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

【问题讨论】:

    标签: c# treeview


    【解决方案1】:

    问题出在这一行:

    using (Form1 form1 = new Form1())
    

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

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

    【讨论】:

    • 呃,多么根本的错误...感谢您的快速回答!
    【解决方案2】:

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

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

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

    【讨论】:

    • 赞成我懒得写的解释:)
    • 谢谢! @Nino 没关系,我明白问题所在。
    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多