pasar datos entre formularios

08/02/2006 - 18:51 por netyweb | Informe spam
Hola a todos. Mi problema es el siguiente:

En un proyecto tengo 2 formularios. Uno en el archivo Form1.cs y el
otro en el
archivo Form2.cs

Cuando inicio el proyecto, el formulario de inicio es el de Form1.cs
En este formulario hay un boton y un textbox.
Con el boton se llama al otro formulario de Form2.cs

En este segundo formulario hay tambien un textbox y un boton.

Aquí quiero que al escribir una palabra en el textbox y pulsar en el
boton,
lo que se ha escrito pase al formulario inicial de Form1.cs y que
desaparezca
el segundo formulario de Form2.cs

En resumen, que se puedan pasar datos de un form secundario a otro
principal.
He probado lo de constructores y otras cosas que previamente he
encontrado en
este foro, pero no me funciona.

Os dejo una prueba de lo que he utilizado:


- Form1 en el archivo Form1.cs:


public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}


private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();

}

private void button2_Click(object sender, EventArgs e)
{
this.Close();
}

}


- Form2 en el archivo Form2.cs:


public partial class Form2 : Form
{

public Form2()
{
InitializeComponent();
}

private void button2_Click(object sender, EventArgs e)
{

// Esto no funciona

Form1 f1 = new Form1();
f1.textBox1.Text = textBox1.Text;
this.Close();
}

}


Gracias y salu2.

Preguntas similare

Leer las respuestas

#1 Jose Luis Manners
08/02/2006 - 23:15 | Informe spam
Crea un variable privada en el form receptor y exponla por medio de una
propiedad. Entonces pasas el valor en la propiedad antes de mostrar el
form.

-
Coopera con el foro. Dinos si te sirvió la respuesta aquí planteada.
-

Saludos,

Jose Luis Manners, MCP
http://www.josemanners.com/

"Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa."
-Blaise Pascal

wrote in message
news:
Hola a todos. Mi problema es el siguiente:

En un proyecto tengo 2 formularios. Uno en el archivo Form1.cs y el
otro en el
archivo Form2.cs

Cuando inicio el proyecto, el formulario de inicio es el de Form1.cs
En este formulario hay un boton y un textbox.
Con el boton se llama al otro formulario de Form2.cs

En este segundo formulario hay tambien un textbox y un boton.

Aquí quiero que al escribir una palabra en el textbox y pulsar en el
boton,
lo que se ha escrito pase al formulario inicial de Form1.cs y que
desaparezca
el segundo formulario de Form2.cs

En resumen, que se puedan pasar datos de un form secundario a otro
principal.
He probado lo de constructores y otras cosas que previamente he
encontrado en
este foro, pero no me funciona.

Os dejo una prueba de lo que he utilizado:


- Form1 en el archivo Form1.cs:


public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}


private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();

}

private void button2_Click(object sender, EventArgs e)
{
this.Close();
}

}


- Form2 en el archivo Form2.cs:


public partial class Form2 : Form
{

public Form2()
{
InitializeComponent();
}

private void button2_Click(object sender, EventArgs e)
{

// Esto no funciona

Form1 f1 = new Form1();
f1.textBox1.Text = textBox1.Text;
this.Close();
}

}


Gracias y salu2.
Respuesta Responder a este mensaje
#2 Octavio Hernandez
09/02/2006 - 01:18 | Informe spam
Hola,

El código que envías no funciona porque en él cuando se pulsa el botón del
Form2 estás creando *OTRO* objeto Form1, en lugar de trabajar sobre el mismo
que lanzó al Form2.
Para que el objeto Form2 pueda operar sobre el mismo objeto Form1 que lo
creó a él, debes pasarle la referencia a ese objeto. Esto normalmente se
hace en un constructor especializado:

public Form2: Form
{
// variable en la que guardaremos la ref al objeto Form1
private Form1 padre = null;

// nuevo constructor (que llama al que ya tiene la clase)
public Form2(Form1 padre): this()
{
// guardamos la referencia en nuestra variable privada
this.padre = padre;
}

// cuando se haga clic sobre el botón, copiamos el contenido de
// nuestro TextBox al TextBox del objeto Form1
// OJO: el TextBox de Form1 no debe ser privado para que se pueda
acceder a él!
private void button2_Click(object sender, EventArgs e)
{
padre.textBox1.Text = this.textBox1.Text;
this.Close();
}
}

En el Form1 cuando quieras lanzar el Form2, haces:

private void button1_Click(object sender, EventArgs e)
{
// creamos un Form2, pasándole la referencia a 'this'
Form2 f2 = new Form2(this);
// lo mostramos
f2.Show();
}

Si lo pruebas, verás que funciona. Pero lo más importante es que entiendas
cómo.
Observación adicional: tal vez te convenga más lanzar el Form2 modalmente
(como un diálogo), utilizando
ShowDialog() en lugar de Show(). En tal caso, consulta la ayuda sobre la
propiedad DialogResult de las clases Form y Button.

He intentado mostrarte esta manera de hacerlo (muchos caminos llevan a Roma)
porque decías que no entendías lo de los constructores. Este método tiene
(por lo menos) un defecto, que es que la clase Form2 queda 'ligada' a la
clase Form1 (utiliza una variable, un parámetro, etc.). No podrás
reutilizarla en otras aplicaciones que hagas. En ese sentido, la variante
que te propone Jose es superior.

Sigue avanzando, para lo que haga falta no dudes en consultar.

Salu2 - Octavio


escribió en el mensaje
news:
Hola a todos. Mi problema es el siguiente:

En un proyecto tengo 2 formularios. Uno en el archivo Form1.cs y el
otro en el
archivo Form2.cs

Cuando inicio el proyecto, el formulario de inicio es el de Form1.cs
En este formulario hay un boton y un textbox.
Con el boton se llama al otro formulario de Form2.cs

En este segundo formulario hay tambien un textbox y un boton.

Aquí quiero que al escribir una palabra en el textbox y pulsar en el
boton,
lo que se ha escrito pase al formulario inicial de Form1.cs y que
desaparezca
el segundo formulario de Form2.cs

En resumen, que se puedan pasar datos de un form secundario a otro
principal.
He probado lo de constructores y otras cosas que previamente he
encontrado en
este foro, pero no me funciona.

Os dejo una prueba de lo que he utilizado:


- Form1 en el archivo Form1.cs:


public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}


private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();

}

private void button2_Click(object sender, EventArgs e)
{
this.Close();
}

}


- Form2 en el archivo Form2.cs:


public partial class Form2 : Form
{

public Form2()
{
InitializeComponent();
}

private void button2_Click(object sender, EventArgs e)
{

// Esto no funciona

Form1 f1 = new Form1();
f1.textBox1.Text = textBox1.Text;
this.Close();
}

}


Gracias y salu2.
Respuesta Responder a este mensaje
#3 Efrén
10/02/2006 - 00:57 | Informe spam
Estoy empezando con c# y todo esto me genera una duda:

Con el codigo del primer post tenemos 2 clases que son Form1 y Form2,
Tambien tenemos el objeto f2 de tipo Form2, pero

¿Como se llama el primer formulario? ¿No esta instanciado? Esto ultimo es
imposible no?

Espero haberme explicado y gracias de antemano.


escribió en el mensaje
news:
Hola a todos. Mi problema es el siguiente:

En un proyecto tengo 2 formularios. Uno en el archivo Form1.cs y el
otro en el
archivo Form2.cs

Cuando inicio el proyecto, el formulario de inicio es el de Form1.cs
En este formulario hay un boton y un textbox.
Con el boton se llama al otro formulario de Form2.cs

En este segundo formulario hay tambien un textbox y un boton.

Aquí quiero que al escribir una palabra en el textbox y pulsar en el
boton,
lo que se ha escrito pase al formulario inicial de Form1.cs y que
desaparezca
el segundo formulario de Form2.cs

En resumen, que se puedan pasar datos de un form secundario a otro
principal.
He probado lo de constructores y otras cosas que previamente he
encontrado en
este foro, pero no me funciona.

Os dejo una prueba de lo que he utilizado:


- Form1 en el archivo Form1.cs:


public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}


private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();

}

private void button2_Click(object sender, EventArgs e)
{
this.Close();
}

}


- Form2 en el archivo Form2.cs:


public partial class Form2 : Form
{

public Form2()
{
InitializeComponent();
}

private void button2_Click(object sender, EventArgs e)
{

// Esto no funciona

Form1 f1 = new Form1();
f1.textBox1.Text = textBox1.Text;
this.Close();
}

}


Gracias y salu2.


Respuesta Responder a este mensaje
#4 Octavio Hernandez
10/02/2006 - 08:30 | Informe spam
Hola Efrén,

En el caso del ejemplo, Form1 es la clase del formulario principal de la
aplicación. El formulario principal normalmente se instancia en el método
Main(), que es el "punto de entrada", el lugar por donde arranca la
aplicación. Si creas una nueva aplicación C# Windows Forms en VS y buscas el
método Main(), verás que dice algo como:

public static void Main()
{
Application.Run(new Form1());
}

Como ves, en esa línea se crea un objeto de la clase Form1(que es el form
principal de la aplicación) y se le pasa como parámetros a
Application.Run(), que se encarga de mostrarlo en pantalla y activar el
bucle de mensajes.

En resumen, el objeto por supuesto sí está instanciado, lo único que para
nosotros es anónimo, ya que no tenemos su referencia en ninguna variable. Si
nos conviniese mantener una referencia a él, podríamos cambiar el código
así:

public static Form1 FormPrincipal = null;

public static void Main()
{
FormPrincipal = new Form1();
Application.Run(FormPrincipal);
}

Entonces siempre tendríamos una referencia al form principal mediante
Form1.FormPrincipal.

Salu2 - Octavio


"Efrén" <epriegoarrobatelecablepuntoes> escribió en el mensaje
news:
Estoy empezando con c# y todo esto me genera una duda:

Con el codigo del primer post tenemos 2 clases que son Form1 y Form2,
Tambien tenemos el objeto f2 de tipo Form2, pero

¿Como se llama el primer formulario? ¿No esta instanciado? Esto ultimo es
imposible no?

Espero haberme explicado y gracias de antemano.


escribió en el mensaje
news:
Hola a todos. Mi problema es el siguiente:

En un proyecto tengo 2 formularios. Uno en el archivo Form1.cs y el
otro en el
archivo Form2.cs

Cuando inicio el proyecto, el formulario de inicio es el de Form1.cs
En este formulario hay un boton y un textbox.
Con el boton se llama al otro formulario de Form2.cs

En este segundo formulario hay tambien un textbox y un boton.

Aquí quiero que al escribir una palabra en el textbox y pulsar en el
boton,
lo que se ha escrito pase al formulario inicial de Form1.cs y que
desaparezca
el segundo formulario de Form2.cs

En resumen, que se puedan pasar datos de un form secundario a otro
principal.
He probado lo de constructores y otras cosas que previamente he
encontrado en
este foro, pero no me funciona.

Os dejo una prueba de lo que he utilizado:


- Form1 en el archivo Form1.cs:


public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}


private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();

}

private void button2_Click(object sender, EventArgs e)
{
this.Close();
}

}


- Form2 en el archivo Form2.cs:


public partial class Form2 : Form
{

public Form2()
{
InitializeComponent();
}

private void button2_Click(object sender, EventArgs e)
{

// Esto no funciona

Form1 f1 = new Form1();
f1.textBox1.Text = textBox1.Text;
this.Close();
}

}


Gracias y salu2.






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida