2015-11-15 4 views
0

Я хочу добавить узел из одной формы в другую. У меня есть следующий код, но он не работает:Не удается добавить новые узлы в элемент управления TreeView

От 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, но узел не добавляется в TreeView в Form1.

+0

Mein Deutsch IST Nicht так выпотрошить, но я предполагаю, что Eintrage ваш TreeView. У меня сейчас нет VS, но я не могу справиться с проблемой стрелять, но я думаю, что метод Add принимает узел как параметр. Можете ли вы попробовать Eintage.Nodes.Add (новый TreeNode (имя)); ? –

+0

эй, шаман, спасибо за ваш быстрый ответ. К сожалению, добавление нового TreeNode не является решением. Я могу видеть правильное имя в своем ящике сообщений, но treeview не добавит узел. Если я добавлю новый узел непосредственно из Form1, он будет работать. –

+0

У вас есть экземпляр Form1, открытый в тот момент, когда нажата кнопка2? Каждый раз, когда вы нажимаете кнопку2, вы создаете новый экземпляр Form1 и вызываете функцию AddGroup, но никогда не показываете вновь созданную форму. Если вы добавите _HauptFenster.Show() до этого. Close() покажет вновь созданную форму. Я предполагаю, что вы не собираетесь создавать новый экземпляр Form1 каждый раз, но хотите, чтобы введенный текст отображался в TreeView в существующей форме? –

ответ

0

Я вижу два возможных сценария:

  1. У вас есть Form2 и нужно, чтобы добавить узел в TreeView Form1 (при условии, Form1 уже показано). В этом случае вы не можете использовать _HauptFenster = new Form1();, который представляет собой новый Form1, а не тот, который у вас уже есть. То, что вы должны сделать, это сделать ссылку на форму Form1 в Form2:

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

Я нашел решение:

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

Я думаю, что это то, что ShAkKiR said; в частности, сценарий 1, где я пытался добавить его в элемент управления TreeView в новом экземпляре Form1 вместо добавления к существующего экземпляра формы Form1.

+0

Да, это тоже работает. Вместо объявления формы в качестве нового экземпляра вы хотели захватить экземпляр, который уже был открыт. –

Смежные вопросы