2013-09-04 2 views
0

У меня есть три формы (form1, form2, form3), моя основная форма - form1, из которой я открыл form2, беря некоторые данные, и у меня есть кнопка обновления на form2, которая приведет меня к form3, теперь я хочу, чтобы любой пользователь записывал на form3 обновляется до form2, как я могу сделать это с помощью C# .net?как передать данные из формы в другую форму, которая ранее была создана из любой другой формы?

(я открыл form2, form3 используя ShowDialog метод())

//reference to form2 
Form2 SecondaryForm = new Form2(mainForm);<br/> 
SecondaryForm.ShowDialog(); 

//in the constructor of Form2 save the reference of Form1 
Form1 form1 = null 

Form2(Form1 mainForm) 
{ 
    form1 = mainForm; 
} 

//then instead of creating a new MainForm again just use reference of Form1 

form1.updateText(data); 
this.Close() 

я использовал приведенный выше код, но я получаю исключение nullreference на form1.updateText (данных);

+0

показать ваш 'updateText();' code –

+0

public void updateText (string txt) {textbox1.text = txt;} – user2748092

+0

Это все ?. показать код в методе –

ответ

0

Просто передайте форму 2 ссылку на форму три при ее создании .. аналогично, как вы сделали для формы1 при открытии формы2. то из формы 3 используйте ссылку form2 для вызова метода updatetext, который должен быть общедоступным методом по форме2

вот код для всех трех форм, вы можете обновить любую форму от других, я сделал это так, чтобы вы могли получить доступ к формам 1 и форма2 в виде3.

using System; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form2 frm2; 
     public Form3 frm3; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     public void updateText() 
     { 
      this.textBox1.Text = ""; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      if (frm2 == null) 
       frm2 = new Form2(this); 

       frm2.ShowDialog(); 
     } 
    } 
} 


using System; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form2 : Form 
    { 
     public Form1 refToForm1; 

     public Form2(Form1 f1) 
     { 
      refToForm1 = f1; 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      if (refToForm1.frm3 == null) 
       refToForm1.frm3 = new Form3(this); 

      refToForm1.frm3.ShowDialog(); 
     } 

     public void UpdateForm2(string txt) 
    { 
     this.textBox1.Text = txt; 
    } 

    } 
} 

using System; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form3 : Form 
    { 
     Form2 refToForm2; 
     public Form3(Form2 f2) 
     { 
      refToForm2 = f2; 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      //Pass any data to Form1; 
      refToForm2.refToForm1.updateText(); 

      //Pass data to form2 
      refToForm2.UpdateForm2("from form3"); 
     } 
    } 
} 
+0

вы можете показать его программно? – user2748092

+0

см. Мои обновления выше ответа – Munawar

1

Я просто попробовал это. Я создал две формы, каждая форма с button и textbox. В Form1

public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 SecondaryForm = new Form2(this); 
     SecondaryForm.ShowDialog(); 
    } 

    public void updateText(string txt) 
    { 
     textBox1.Text = txt; 
    } 

Тогда в Form2

Form1 form1 = null; 
    public Form2(Form1 mainForm) 
    { 
     form1 = mainForm; 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     form1.updateText(textBox1.Text); 
     this.Close(); 
    } 

Я использовал это, и она работала, и я не получил каких-либо исключений

+0

Я получаю 'System.NullReferenceException' в form1.updateText (данные); – user2748092

+0

@ user2748092 Проверить измененный ответ –

0

Хотя это может быть не подходит для ваших данных, может быть, вы могли бы рассмотреть ваши формы как «Просмотры» для базовой «Модели», которая представляет все ваши данные? Если это так, вы можете создать экземпляр своего класса «Модель» и дать всем 3 формам ссылку на него. См. here для некоторого объяснения «Просмотр» и «Модель».

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