我试图将一些数据从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();
所以,我的问题是,如何将数据值传递给主窗体的旧实例?无需创建新实例并显示新实例。有没有办法做到这一点?
答案 0 :(得分:4)
这是因为您在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";
}
}
这段代码只是一个例子,可能不会按原样编译。
答案 1 :(得分: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()
答案 2 :(得分:0)
主要形式:
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
}