在不打开新实例的情况下将数据返回到窗体

本文关键字:情况下 数据 返回 窗体 实例 新实例 | 更新日期: 2023-09-27 18:19:59

我正试图将一些数据从Form2返回到Form1,一切似乎都很好,我得到了数据,等等,但是,当我试图将数据传递到文本框时,它不会更改文本。只有当我打开Form1的一个新实例时,在Form2上它才能工作。为什么会发生这种情况?我不能将文本发送到旧实例吗?

我正在使用此代码;

Form1(主表单)

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

所以,我的问题是,如何将数据值传递给主窗体的旧实例?而不必创建新实例并显示新实例。有办法做到这一点吗?

在不打开新实例的情况下将数据返回到窗体

这是因为您正在Form2代码中创建Form1的实例。您要做的是将Form2的parentForm设置为创建它的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";
    }
}

这段代码只是一个例子,可能不会按原样编译。

您可以做的是将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()

主要形式:

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
}
相关文章: