Una de WinForms Facil!!!

08/11/2004 - 17:49 por MIRo | Informe spam
Buenas,

Tengo dos formularios windows (Form1 y Form2), pues buen el principal es
Form1, este abre Form2, un vez abierto Form2 tiene q llamar una función
publica de Form1 y cerrarse.

si creo una instancia:

Form Form1 )= new form1();
me crea un formulario nuevo y yo quiero instanciar la ventana abierta y no
una nueva?

Tb he probado
fom1.funcionpublica();
pero no sale esa funcion.

He compilado primero y luego vuelvo a probar y tampoco

Alguien sabe como se hace?

Preguntas similare

Leer las respuestas

#1 Misael Monterroca
08/11/2004 - 18:18 | Informe spam
Pasa la referencia de form1 a tu segundo formulario


En el constructor de Form2

public Form2(Form1 frm1)

{

frm1.tumetodo

//

// Required for Windows Form Designer support

//

InitializeComponent();

//

// TODO: Add any constructor code after InitializeComponent call

//

}


Y en donde estas instanciando al formulario 2

Form2 frm2 = new Form2(this);


Saludos!
http://www.neo-mx.com/blog




"MIRo" wrote in message
news:
Buenas,

Tengo dos formularios windows (Form1 y Form2), pues buen el principal es
Form1, este abre Form2, un vez abierto Form2 tiene q llamar una función
publica de Form1 y cerrarse.

si creo una instancia:

Form Form1 )= new form1();
me crea un formulario nuevo y yo quiero instanciar la ventana abierta y no
una nueva?

Tb he probado
fom1.funcionpublica();
pero no sale esa funcion.

He compilado primero y luego vuelvo a probar y tampoco

Alguien sabe como se hace?


Respuesta Responder a este mensaje
#2 pablo crosio
08/11/2004 - 18:29 | Informe spam
hola!

te cito 2 alternativas

1 - podes pasar una referencia del formulario Form1 al Form2 (esto podria
ser un parametro en el mismo constructor de Form2)

2 - tener una variable miembro publica en Form2 de tipo Form1 que referencie
a Form1, harias (desde Form1):

Form2 f2 = new Form2();
f2.Referencia_A_Form1 = this;
f2.Show();

y desde Form2: Referencia_A_Form1.FuncionPublica();

espero te sirva

salu2!!

pablo




"MIRo" escribió:

Buenas,

Tengo dos formularios windows (Form1 y Form2), pues buen el principal es
Form1, este abre Form2, un vez abierto Form2 tiene q llamar una función
publica de Form1 y cerrarse.

si creo una instancia:

Form Form1 )= new form1();
me crea un formulario nuevo y yo quiero instanciar la ventana abierta y no
una nueva?

Tb he probado
fom1.funcionpublica();
pero no sale esa funcion.

He compilado primero y luego vuelvo a probar y tampoco

Alguien sabe como se hace?



Respuesta Responder a este mensaje
#3 Alfredo Novoa
08/11/2004 - 18:55 | Informe spam
On Mon, 8 Nov 2004 17:49:55 +0100, "MIRo" wrote:

Tengo dos formularios windows (Form1 y Form2), pues buen el principal es
Form1, este abre Form2, un vez abierto Form2 tiene q llamar una función
publica de Form1 y cerrarse.



Es muy fácil.

si creo una instancia:



Querrás decir un ejemplar.

Form Form1 )= new form1();
me crea un formulario nuevo



Claro, eso es justo lo que le estás mandando hacer.

"To create an instance" significa crear un ejemplar, es decir un nuevo
objeto formulario.

y yo quiero instanciar la ventana abierta y no
una nueva?



Primero: instanciar no existe en español, y segundo: si a lo que te
refieres es al verbo inglés "to instantiate", eso no es lo que quieres
hacer. Lo que quieres hacer es referenciar (to referentiate) la
ventana abierta, y para eso solo necesitas pasarle al form2 una
referencia (un puntero) al form1.

Tb he probado
fom1.funcionpublica();
pero no sale esa funcion.



Por que has definido Form1 como un objeto de la clase Form y no como
un objeto de la clase de formularo que has creado, que si tiene esa
función.

Tendrías que haber creado form1 así:

Form1 form1 = new Form1()


Saludos
Respuesta Responder a este mensaje
#4 A.Poblacion
08/11/2004 - 19:00 | Informe spam
"MIRo" wrote in message
news:
[...]
Tb he probado
fom1.funcionpublica();
pero no sale esa funcion.



Además de las soluciones que ya te han dado, si quieres que funcione
form1.funcionpublica(); lo que puedes hacer es declarar funcionpublica como
static dentro de form1:

public static funcionpublica() {...}

Ten presente que esto solo se puede hacer a condición de que funcionpublica
no utilice internamente ninguna variable ni método de instancia de form1,
sino solo variables y métodos que a su vez sean "static".

De tu intento de usar form1.funcionpublica() deduzco que posiblemente vengas
de programar en visual basic. En visual basic eso funcionaba porque el vb
hacía internamente un "Dim Form1 as New Form1", es decir, creaba una
instancia del formulario y la metía en una variable con el mismo nombre.
Cuando llamabas a form1.funcionpublica(), es form1 era la variable, no la
clase. Por eso podías llamar, a través de la variable, a las funciones de
instancia. En C#, si pones form1, siempre se refiere a la clase, pues no hay
una variable que se refiera a la clase a no ser que tú la crees expresamente
(esto es lo que te han respondido ya en otros mensajes, es decir, cómo
puedes pasarle a tu formulario una variable con una instancia de la clase).
Respuesta Responder a este mensaje
#5 Antonio Cuesta
10/11/2004 - 08:55 | Informe spam
Muy buenos días.


Otra opción es la siguiente:

En el Form1 tenemos la función publica Hola:

public string Hola()
{
return "Un saludo desde Form1";
}


Si llamamos a Form2 de forma modal:

Form2 f = new Form2();
f.ShowDialog(this);

En nuestro Form2 podemos utilizar la función Hola de Form1 de la siguiente
forma:

string textoSaludo = ((Form1)this.Owner).Hola();

Lo de (Form1) es para que el Intellisense, nos muestre los metodos publicos
(entre ellos Hola).

Ojo si el propietario (Owner) no es un Form1 esto no funcionara.


Un saludo.
Antonio Cuesta García.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida