【问题标题】:Can't add new nodes to TreeView control无法向 TreeView 控件添加新节点
【发布时间】:2015-11-15 16:56:56
【问题描述】:

我想将一个节点从一种形式添加到另一种形式。我有以下代码,但它不起作用:

来自Form2:

private void button2_Click(object sender, EventArgs e)
{
    _HauptFenster = new Form1();
    _HauptFenster.AddGroup(textBox1.Text);
    this.Close();   
}

到Form1:

public void AddGroup(string name)
{
    MessageBox.Show(name);
    Einträge.Nodes.Add(name);
}

我可以在MessageBox中看到节点的真实名称,但是该节点没有被添加到Form1上的TreeView中。

【问题讨论】:

  • Mein Deutsch ist nicht so gut,但我假设 Eintrage 是您的 TreeView。我现在没有 VS,但不能真正解决问题,但我认为 Add 方法需要一个 Node 作为参数。你可以试试 Eintage.Nodes.Add(new TreeNode(name)); ?
  • 嘿萨满,感谢您的快速回复。不幸的是,添加一个新的 TreeNode 不是解决方案。我可以在消息框中看到正确的名称,但树视图不会添加节点。如果我直接从 Form1 添加一个新节点,它将起作用。
  • 在单击哪个按钮 2 时是否打开了 Form1 的实例?每次单击 button2 时,您都在创建 Form1 的新实例并调用 AddGroup 函数,但从未显示新创建的表单。如果在 this.Close() 之前添加 _HauptFenster.Show() ,它将显示新创建的表单。我猜您不是每次都创建 Form1 的新实例,而是希望输入的文本显示在现有表单的 TreeView 中?

标签: c# .net winforms treeview


【解决方案1】:

我看到两种可能的情况:

  1. 您有一个 Form2,您需要将一个节点添加到 Form1 的树视图中(假设 Form1 已经显示)。在这种情况下,您不能使用 _HauptFenster = new Form1();,它是一个新的 Form1,而不是您已经拥有的。你应该做的是在form2中引用form1:

    public partial class Form1 : Form
    {
        Form1 form1;
    
        public Form2()
        {    
            InitializeComponent();
        }
    
        public Form2(Form1 form1):this()
        {
            this.form1= form1;
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            form1.AddGroup("something");
            this.Close();
        }
    }
    

    并更改修改打开Form2的方式:

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2= new Form2(this);
        form2.Show();
    }
    
  2. Form1 还没有显示,因为你忘了打开它:

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 form1= new Form1 ();
        form1.Show();
        form1.AddGroup("something");
        this.Close();
    }
    

【讨论】:

    【解决方案2】:

    我找到了解决办法:

    Form1 master = (Form1)Application.OpenForms["Form1"];
    master.Einträge.Nodes.Add(name);
    

    我想这就是ShAkKiR said;具体来说,在场景 1 中,我试图将其添加到 Form1 的 new 实例中的 TreeView 控件,而不是添加到 Form1 的 现有 实例中。

    【讨论】:

    • 是的,这也有效。您不想将表单声明为新实例,而是要获取已经打开的实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多