¿Cómo actualizar textbox en form1 desde form2?

Tengo 2 formularios de Windows.

En primer lugar, la forma de la ventana principal, tiene un cuadro de texto multilínea y un botón. El botón abre la segunda forma en la que puedo agregar datos a la matriz mediante el uso del objeto AddEntry.

En la segunda forma tengo cuadros de texto y un botón (btnAddEntry) que debería actualizar el contenido del cuadro de texto desde el primer formulario.

Cuando se ingresan los datos, quiero mostrar los datos en el cuadro de texto de la primera forma.

El problema es que el código que se me ocurrió no parece funcionar.

¿Cómo podría resolver esto?

Para que funcionen los BASIC, haga lo siguiente … Cree un nuevo proyecto. Nada de su código actual, ventanas, etc. El proyecto predeterminado creará un formulario “Form1”. Déjelo en blanco por el momento.

Agregue un formulario NUEVO al proyecto, se establecerá de manera predeterminada en “Formulario 2” … Coloque un solo cuadro de texto y un solo botón en él. Para sonrisas y aclaraciones para diferenciar entre los nombres de los objetos, cambie el nombre de los controles en Form2 a “txtOnForm2” y “btnOnForm2” (distingue entre mayúsculas y minúsculas para mi muestra, y legibilidad frente a “txtonform2” en minúsculas). Ahora, en el formulario, haga clic derecho y haga clic en “Ver código”. Le llevará a la otra statement de “Clase parcial” donde se encuentran sus constructores. Agregue lo siguiente, no se preocupe por los errores de comstackción ya que la otra mitad será cuando coloquemos el código en Form1 a continuación …

// 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 ); } 

Guarde y cierre el diseñador de Form2 y la ventana de código.

Ahora, abre Form1. Ponga un solo cuadro de texto y un solo botón en él. Los nombres predeterminados para los controles serán “textbox1” y “button1” respectivamente. Déjalo como está. Haga doble clic en el botón (en form1). Aparecerá un fragmento de código para ese botón. Pegar lo siguiente

 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; } 

Ahora, guarde los formularios y ejecútelos. Haga clic en el botón en la primera forma, llama al segundo con la instancia ya creada de sí misma, no una nueva segunda instancia de sí mismo. Se mostrará el segundo formulario. Cambia las ventanas para que puedas ver ambas.

Ingrese texto en la segunda ventana del cuadro de texto y haga clic en el botón … seguir el avance / retroceso de lo que viene / va.

Esto ha sido respuestas otras veces, principios similares …

Eche un vistazo a una pregunta similar

Para “Transferir” información de: Form2 a Form1, deberá crear un método público para exponer lo que desea tocar. Luego, desde la segunda forma (que básicamente tiene una instancia de puntero a la primera), llame a ese método con lo que quiera hacer / actuar. Esto también podría hacerse haciendo una propiedad pública sobre la cual actuar.

De lo que quizás ya tengas trabajando …

 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; } } } 

Ahora, para saber cómo obtener su SEGUNDA forma

clase parcial pública 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; } 

}

Con suerte, esto expone las formas de obtener y establecer el contenido entre formas para usted … tanto como el método () se acerca y / o se obtiene / establece a través de las propiedades.

Su problema es que MainWindow mainWindow = new MainWindow () crea una nueva versión de su MainWindow no una referencia a la versión ya existente. En su formulario MainWindow, al abrir su segundo formulario, debe pasar una referencia junto con el segundo formulario pasándolo al método Show (que lo almacena en una variable llamada owner of type object) de esta manera:

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

Entonces puede hacer referencia al cuadro de texto de esta manera:

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