Enviar valores de un formulario a otro formulario

Quiero pasar valores entre dos formularios (c #). ¿Cómo puedo hacerlo?

Tengo dos formas: Form1 y Form2.

Form1 contiene un botón. Cuando hago clic en ese botón, Form2 debe abrirse y Form1 debe estar en modo inactivo (es decir, no seleccionable).

Form2 contiene un cuadro de texto y un botón de envío. Cuando escribo un mensaje en el cuadro de texto de Form2 y hago clic en el botón Enviar, el Formulario 2 debe cerrarse y el Formulario 1 debe resaltarse con el valor enviado.

¿Cómo puedo hacerlo? ¿Alguien puede ayudarme a hacer esto con un simple ejemplo?

Hay varias soluciones para esto, pero este es el patrón que tiendo a usar.

// Form 1 // inside the button click event using(Form2 form2 = new Form2()) { if(form2.ShowDialog() == DialogResult.OK) { someControlOnForm1.Text = form2.TheValue; } } 

Y…

 // Inside Form2 // Create a public property to serve the value public string TheValue { get { return someTextBoxOnForm2.Text; } } 
 private void button1_Click(object sender, EventArgs e) { Form2 frm2 = new Form2(textBox1.Text); frm2.Show(); } 

  public Form2(string qs) { InitializeComponent(); textBox1.Text = qs; } 

Definir una propiedad

 public static class ControlID { public static string TextData { get; set; } } 

En la form2

 private void button1_Click(object sender, EventArgs e) { ControlID.TextData = txtTextData.Text; } 

Obteniendo los datos en form1 y form3

 private void button1_Click(object sender, EventArgs e) { string text= ControlID.TextData; } 

Después de una serie de dificultades para pasar los datos de una forma a otra, finalmente encontré una respuesta estable. Funciona como el encanto.

Todo lo que necesita hacer es declarar una variable como public static datatype 'variableName' en un formulario y asignar el valor a esta variable que desea pasar a otro formulario y llamar a esta variable en otra forma usando directamente el nombre del formulario ( No hacer crear objeto de esta forma ya que se puede acceder directamente a las variables estáticas ) y acceder a este valor variable.

Ejemplo de tal es,

Formulario 1

 public static int quantity; quantity=TextBox1.text; \\Value which you want to pass 

Form2

 TextBox2.Text=Form1.quantity;\\ Data will be placed in TextBox2 

Declarar una cadena pública en form1

 public string getdata; 

En el botón de form1

 form2 frm= new form2(); this.hide(); form2.show(); 

Para enviar datos a form1 puedes probar cualquier evento y código siguiente en ese evento

 form1 frm= new form1(); form1.getdata="some string to be sent to form1"; 

Ahora, después del cierre de form2 y la apertura de form1 , puede usar los datos devueltos en la cadena getdata .

declare cadena en form1 cadena pública TextBoxString;

en form1 haga clic en evento agregar

 private void button1_Click(object sender, EventArgs e) { Form1 newform = new Form1(); newform = this; this.Hide(); MySecform = new Form2(ref newform); MySecform.Show(); } 

en form2 constructer

 public Form2(ref Form1 form1handel) { firstformRef = form1handel; InitializeComponent(); } 

en form2 cajón variable Form1 firstformRef;

 private void Submitt_Click(object sender, EventArgs e) { firstformRef.TextBoxString = textBox1.Text; this.Close(); firstformRef.Show(); } 

He trabajado en varios proyectos winform y, a medida que las aplicaciones se vuelven más complejas (más diálogos e interacciones entre ellos), he comenzado a utilizar algún sistema de eventos para ayudarme, porque la administración de abrir y cerrar ventanas manualmente será difícil de mantener y desarrollar más.

He utilizado CAB para mis aplicaciones, tiene un sistema de eventos, pero puede ser una exageración en tu caso 🙂 Podrías escribir tus propios eventos para aplicaciones más simples

Código Form1:

 private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.ShowDialog(); MessageBox.Show("Form1 Message :"+Form2.t.Text); //can put label also in form 1 to show the value got from form2 } 

Código de Form2:

  public Form2() { InitializeComponent(); t = textBox1; //Initialize with static textbox } public static TextBox t=new TextBox(); //make static to get the same value as inserted private void button1_Click(object sender, EventArgs e) { this.Close(); } 

¡Funciona!

En este código, pasas un texto a Form2. Form2 muestra ese texto en textBox1. El usuario escribe texto nuevo en textBox1 y presiona el botón de enviar. Form1 toma ese texto y lo muestra en un cuadro de texto en Form1.

 public class Form2 : Form { private string oldText; public Form2(string newText):this() { oldText = newText; btnSubmit.DialogResult = DialogResult.OK; } private void Form2_Load(object sender, EventArgs e) { textBox1.Text = oldText; } public string getText() { return textBox1.Text; } private void textBox1_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { DialogResult = System.Windows.Forms.DialogResult.OK; } } } 

Y este es el código Form1:

 public class Form1:Form { using (Form2 dialogForm = new Form2("old text to show in Form2")) { DialogResult dr = dialogForm.ShowDialog(this); if (dr == DialogResult.OK) { tbSubmittedText = dialogForm.getText(); } dialogForm.Close(); } } 

Cómo pasar los valores del formulario a otro formulario

1.) Vaya a Form2 y haga doble clic en él. En el código escribe esto.

 public Form2(string v) { InitializeComponent(); textBox1.Text = v; } 

2.) Vaya a Form1 y haga doble clic en él. En el código escribe esto. // En su botón de comando en Form1

 private void button1_Click(object sender, EventArgs e) { Form2 F2 = new Form2(textBox1.Text); F2.Show(); } 

puede pasar como parámetro el cuadro de texto de Form1, así:

En el controlador de formulario 1:

 private void button2_Click(object sender, EventArgs e) { Form2 newWindow = new Form2(textBoxForReturnValue); newWindow.Show(); } 

En el formulario 2

 public static TextBox textBox2; // class atribute public Form2(TextBox textBoxForReturnValue) { textBox2= textBoxForReturnValue; } private void btnClose_Click(object sender, EventArgs e) { textBox2.Text = dataGridView1.CurrentCell.Value.ToString().Trim(); this.Close(); } 

Esto es muy simple. supongamos que tiene 2 ventanas de Form1 y Form2 y desea enviar el registro de textbox1 de Form1 a Form2 y mostrar este registro en la etiqueta1 de Form2; luego en Form2 crea una etiqueta cuyo nombre es label1 y ve a la propiedad de label1 y establece ‘Modifiers’ = public y en Form one crea un textBox con id textBox1 y un botón de submit de nombre luego escribe el siguiente código en el botón click event

 button1_Click(object sender, EventArgs e) { Form2 obj=new Form2(); obj.label1.text=textBox1.text.ToString(); obj.show(); } 

eso es … de esta manera puede vincular el registro del conjunto de datos a la vista de cuadrícula de datos de otro formulario ……

Los constructores son las mejores formas de pasar datos entre formularios u objetos Gui, puedes hacerlo. En el botón de clic de form1 debe tener:

 Form1.Enable = false; Form2 f = new Form2(); f.ShowDialog(); 

En el formulario 2, cuando el usuario hace clic en el botón, debe tener un código como este o similar:

 this.Close(); Form1 form = new Form1(textBox1.Text) form.Show(); 

Una vez dentro de la carga de formulario de la forma 1 puede agregar código para hacer cualquier cosa a medida que obtiene los valores del constructor.

Puede utilizar un enfoque diferente si lo desea.

  1. Usando System.Action (Aquí simplemente pasas la función de formularios principales como el parámetro al formulario hijo como una función de callback)
  2. Método OpenForms (Usted llama directamente a uno de sus formularios abiertos)

Usando System.Action

Puede pensarlo como una función de callback pasada al formulario secundario.

 // -------- IN THE MAIN FORM -------- // CALLING THE CHILD FORM IN YOUR CODE LOOKS LIKE THIS Options frmOptions = new Options(UpdateSettings); frmOptions.Show(); // YOUR FUNCTION IN THE MAIN FORM TO BE EXECUTED public void UpdateSettings(string data) { // DO YOUR STUFF HERE } // -------- IN THE CHILD FORM -------- Action UpdateSettings = null; // IN THE CHILD FORMS CONSTRUCTOR public Options(Action UpdateSettings) { InitializeComponent(); this.UpdateSettings = UpdateSettings; } private void btnUpdate_Click(object sender, EventArgs e) { // CALLING THE CALLBACK FUNCTION if (UpdateSettings != null) UpdateSettings("some data"); } 

Método OpenForms

Este método es fácil ( 2 líneas ). Pero solo funciona con formularios que están abiertos. Todo lo que necesita hacer es agregar estas dos líneas donde quiera que quiera pasar algunos datos.

 Main frmMain = (Main)Application.OpenForms["Main"]; frmMain.UpdateSettings("Some data"); 

Proporcioné mi respuesta a una pregunta similar aquí

Ok, entonces Form1 tiene un cuadro de texto, primero que todo, tiene que establecer este cuadro de texto Form1 en público en la propiedad de cuadro de texto.

Formulario de código 1:

 Public button1_click() { Form2 secondForm = new Form2(this); secondForm.Show(); } 

Pase Form1 como this en el constructor.

Código Form2:

 Private Form1 _firstForm; Public Form2(Form1 firstForm) { _firstForm = firstForm: } Public button_click() { _firstForm.textBox.text=label1.text; This.Close(); } 

Puedes usar esto;

Botón Form11 clic

 private void button1_Click(object sender, EventArgs e) { Form2 frm2 = new Form2(); this.Hide(); frm2.Show(); } 

Y agrega esto a Form2

 public string info = ""; 

Botón Form21 clic

 private void button1_Click(object sender, EventArgs e) { info = textBox1.Text; this.Hide(); BeginInvoke(new MethodInvoker(() => { Gogo(); })); } public void Gogo() { Form1 frm = new Form1(); frm.Show(); frm.Text = info; } 

Simple obtener el valor con:

 var form1 = new Form1(); string sample = form1.examplestring; 

Para establecer el valor:

 var form1 = new Form1(); form1.examplestring = example; 

pero verifique que la cadena sea “cadena pública”

 public string example = "test"; 

si cambia la propiedad de modificadores de un control en un formulario a público, otros formularios pueden acceder a ese control. fe:

  Form2 frm; private void Form1_Load(object sender, EventArgs e) { frm = new Form2(); frm.Show(); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show(frm.txtUserName.Text); //txtUserName is a TextBox with Modifiers=Public }