Возврат данных в формы без открытия нового экземпляра - PullRequest
0 голосов
/ 10 января 2012

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

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

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

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

Form2 SecondaryForm = new Form2();

SecondaryForm.ShowDialog();

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

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

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

Ответы [ 3 ]

4 голосов
/ 10 января 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";
    }
}

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

3 голосов
/ 10 января 2012

Что вы можете сделать, это передать ссылку 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()
0 голосов
/ 15 марта 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
}
...