Возврат данных в формы без открытия нового экземпляра

Я пытаюсь вернуть некоторые данные из Form2 в Form1, все вроде нормально, я получил данные и так далее, но когда я пытаюсь передать свои данные в текстовое поле, текст не меняется. Только если я открываю новый экземпляр Form1, на Form2 он работает. Почему это происходит? Нельзя ли отправить текст на старый экземпляр?

Я использую этот код;

Форма1 (основная форма)

public void updateText(string data)
{
    MessageBox.Show(data);
    txtGood.Text = data;
}

Form2 SecondaryForm = new Form2();

SecondaryForm.ShowDialog();

Form2 (вторая форма с пользовательскими данными)

Form1 MainForm = new Form1();
MainForm.updateText(data);
MainForm.ShowDialog();
this.Close();

Итак, мой вопрос: как я могу передать значения данных в старый экземпляр основной формы? без необходимости создавать новый экземпляр и показывать новый экземпляр. Есть ли способ сделать это?


person Lucas Gonçalves Vilela    schedule 10.01.2012    source источник


Ответы (3)


Что вы можете сделать, так это передать ссылку MainForm(Form1) на second Form(Form2). Затем вместо создания MainForm снова используйте ссылку для обновления файла textbox.

   //pass reference to form2
   Form2 SecondaryForm = new Form2(mainForm);
   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()
person Haris Hasan    schedule 10.01.2012
comment
Спасибо вам, ребята. я использую первое решение. - person Lucas Gonçalves Vilela; 10.01.2012

Это связано с тем, что вы создаете экземпляр Form1 в коде Form2. Что вы хотите сделать, так это настроить parentForm Form2, чтобы он был экземпляром Form1, который его создал.

public partial class Form1 : Form
{
    public void CreateForm2()
    {
        Form2 form2 = new Form2(this);
        form2.ShowDialog();
    }

    public string MyTextboxText
    {
        get { return txtMyTextbox.Text; }
        set { txtMyTextbox.Text = value; }
    }
}

public partial class Form2 : Form
{
    private Form1 parentForm;

    public Form2(Form1 parentForm)
    {
        this.parentForm = parentForm;
    }

    public void myButtonClick() 
    {
        parentForm.MyTextboxText = "Hello";
    }
}

Этот код является просто примером, вероятно, он не будет компилироваться как есть.

person Matthew    schedule 10.01.2012
comment
Спасибо вам, ребята. я использую первое решение. - person Lucas Gonçalves Vilela; 10.01.2012
comment
Дорогой Мэтью, вы не можете установить parentForm формы, вы можете только получить - person Victor; 02.01.2014

основная форма:

private void Button2_Click(object sender, EventArgs e) {
    frmCustomersRecord rec = new frmCustomersRecord(this); 
    rec.ShowDialog();
    rec.GetData(); 
}

дочерняя форма:

public partial class frmCustomersRecord : Form 
{
    public frmCustomersRecord()
    {
        //blank contructor (Instance of an class)
    }

    frmCustomerDetails cd;

    public frmCustomersRecord(frmCustomerDetails parentForm) : this()
    {
        this.cd = parentForm; 
    } 
    //call the methods using child form object
}
person user3423912    schedule 15.03.2014