如何从form2更新form1中的文本框?

我有2个Windows窗体。

首先,主窗口窗体,有多行文本框和一个button。 该button打开第二个窗体,我可以使用AddEntry对象将数据添加到数组中。

在第二种forms中,我有文本框和一个button(btnAddEntry),它应该从第一个表单更新文本框的内容。

input数据时,我想从第一个窗体的文本框中显示数据。

问题是,我想到的代码似乎没有工作。

我将如何解决这个问题?

要使BASIC工作,请执行以下操作..创build一个新项目。 你当前的代码,窗口等等什么都没有……默认的项目将会创build一个“Form1”的表单,现在就离开它。

添加一个新的表单到项目,它将默认为“Form2”…把一个文本框和一个单一的button就可以了。 对于微笑和明确区分对象名称,将Form2上的控件的名称更改为“txtOnForm2”和“btnOnForm2”(对我的示例区分大小写,可读性与“txtonform2”全部小写)。 现在,在窗体上,右键单击并单击“查看代码”。 它会带你到另一个“部分类”的声明,你的构造函数被发现。 添加以下内容,不要担心编译错误,因为当我们将代码放到Form1中时,另一半将会是…

// specifically typecasting the TYPE of form being passed in, // not just a generic form. We need to see the exposed elements Form1 CalledFrom; // Ensure to do the : this() to make sure default behavior // to initialize the controls on the form are created too. public Form2(Form1 viaParameter) : this() { CalledFrom = viaParameter; } private void btnOnForm2_Click(object sender, EventArgs e) { CalledFrom.ValuesByProperty = this.txtOnForm2.Text; MessageBox.Show( "Check form 1 textbox" ); string GettingBack = CalledFrom.ValuesByProperty; MessageBox.Show( GettingBack ); CalledFrom.SetViaMethod( "forced value, not from textbox" ); MessageBox.Show( "Check form 1 textbox" ); GettingBack = CalledFrom.GetViaMethod(); MessageBox.Show( GettingBack ); } 

保存并closuresForm2devise器和代码窗口。

现在,打开Form1。 把一个文本框和一个button就可以了。 控件的默认名称分别为“textbox1”和“button1”。 保持原样。 双击button(在form1上)。 它会调出该button的代码片段。 粘贴以下内容

 private void button1_Click(object sender, EventArgs e) { Form2 oFrm = new Form2(this); oFrm.Show(); } public string ValuesByProperty { get { return this.textBox1.Text; } set { this.textBox1.Text = value; } } public void SetViaMethod(string newValue) { this.textBox1.Text = newValue; } public string GetViaMethod() { return this.textBox1.Text; } 

现在,保存表格并运行它们。 单击第一个窗体上的button,使用已经创build的实例调用第二个窗体,而不是本身的新的第二个实例。 第二种forms将被显示。 移动窗户,这样你可以看到两个。

在文本框的第二个窗口中input一些文本,然后单击button…按照来来往往的前后方向。

这是其他时间的答案,类似的原则…

看看类似的问题

要将Form2中的信息“传回”到Form1,您需要在其上创build一个公共方法来显示您想要触摸的内容。 然后,从第二个表单(基本上有一个指针实例到第一个表单),调用该方法的任何你想做的/行动,这也可以通过做一个公共财产来实现。

从你可能已经工作…

 public partial class YourFirstForm { // example to expose a method on first form and pass IN a value public void SetMyObject( string ValueFromSecondForm ) { this.txtBox1.Text = ValueFromSecondForm; } // example via a property you are trying to set... identical in results public string ViaSetAsProperty { set { this.txtBox1.Text = value; } } // Now, the reverse, lets expose some things from form 1 to the second... public string GetMyObjectText() { return this.txtBox1.Text; } // or via a GETTER property... public string GettingText { get { return this.txtBox1.Text; } } // However, if you want to allow both set and get to form 1's values, // do as a single property with both getter / setter exposed.. public string TextContent { get { return this.txtBox1.Text; } set { this.txtBox1.text = value; } } } 

现在,如何从你的第二种forms获得

公共部分类YourSecondForm {Form ObjRefToFirstForm;

 public YourSecondForm( Form passedInVar ) { // preserve the first form ObjRefToFirstForm = passedInVar; } // Now, however you want to handle... via a button click, the text change event, etc public void SendDataToForm1() { // via calling the METHOD on form 1 that is public ObjRefToFirstForm.SetMyObj( this.SomeOtherTextbox.Text ); // via a SETTER on form 1 ObjRefToFirstForm.ViaSetAsProperty = this.SomeOtherTextbox.Text; // sample to GET something from form 1 via method string TestGet = ObjRefToFirstForm.GetMyObjectText(); // or from the exposed property TestGet = ObjRefToFirstForm.GettingText; // Now, try via the one property that has both a setter and getter ObjRefToFirstForm.TextContent = this.SomeOtherTextbox.Text; TestGet = ObjRefToFirstForm.TextContent; } 

}

希望这暴露了方法获取和设置内容之间的forms为你…无论是方法()的方法和/或获取/设置通过属性。

你的问题是,MainWindow mainWindow = new MainWindow()创build一个新版本的MainWindow而不是对现有版本的引用。 在你的MainWindow窗体中,打开你的第二个窗体时,你需要将一个引用传递给第二个窗体,方法是将其传递给Show方法(将其存储在一个名为owner的types为object的variables中),如下所示:

 AddEntryWindow addEntryWindow = new AddEntryWindow(); addEntryWindow.ShowDialog(this); 

然后你可以像这样引用文本框:

 foreach (AddEntry list in addedEntry) { // Displaying and formating the output in text box in MainWindow. ((MainWindow)owner).txtDisplayFileContent.Text += txtUserName.Text; }