ref entre formularios

13/07/2004 - 22:22 por Calima | Informe spam
Hola a todos,
Tengo un formulario que le pasa por referencia al constructor de otro
formulario un valor entero.

El segundo formulario varía dicho entero y teoricamente el valor del entero
asignado en el formulario principal por consiguiente también debería tener
el mismo valor (ya que apuntan al mismo espacio de memoria).. Es correcto?

A mi no me cambia el valor. Os pongo un ejemplo rápido:

public class Form1
{
private int A;
public Form1()
{
A = 0;
}

public void AbreForm2()
{
new Form2(ref A).ShowDialog();
Console.Writeline(A.ToString()); // Debería mostrar 0 ó 10 ????
}
}

public class Form2()
{
private int B;
public Form2(ref int A)
{
B = A;
B = 10;
}
}


Un saludo y gracias

Preguntas similare

Leer las respuestas

#6 Alejandro Perez
14/07/2004 - 14:32 | Informe spam
Hola Calima. Pues asi como que cambiar la variable A
desde CUALQUIER parte del Form2 y cambiar el valor del
Form1 nop. Solo lo vas a poder hacer desde el constructor
o que pases luego ese parametro A como referencia a otro
metodo del form2.

Bye Calima!

Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela


y entonces, no hay manera de poder cambiar la variable A


desde cualquier
parte del Form2?

Un saludo.



"Octavio Hernandez" escribió en el


mensaje
news:
Calima,

Eso *NO* podrás hacerlo con los recursos "normales" de




C#, porque no hay
punteros en esa "parte" del lenguaje. Habría que mirar




el capítulo
relacionado con el código no seguro (unsafe code).

Slds - Octavio

"Calima" escribió en el mensaje
news:
> Exacto, pero si yo quiero cambiar el valor de la




variable pasada como
> referencia desde cualquier método del Form2, como lo




puedo hacer?? esto
es
> lo que he echo y no funciona:
>
> public class Form1
> {
> private int A;
> public Form1()
> {
> A = 0;
> }
>
> public void AbreForm2()
> {
> new Form2(ref A).ShowDialog();
> Console.Writeline(A.ToString()); //




Debería mostrar 0 ó 10
????
> }
> }
>
> public class Form2()
> {
> private int B;
> public Form2(ref int A)
> {
> B = A;
> }
>
> public void UnMetodoCualquiera()
> {
> B;
> }
> }
>
>
>
> "Alejandro Perez"




escribió en el mensaje
> news:2b99001c46920$094b0d40$
> Hola Calima, la cuestion es que esa variable privada




B no
> es la que mantiene la referencia a A del form1, sino




el
> parametro A del constructor del form2.
>
> Si?
>
> Bye
> Alejandro Perez
> MCSD/MCDBA/MCT
> Caracas - Venezuela
>
>
> >Hola a todos,
> >Tengo un formulario que le pasa por referencia al
> constructor de otro
> >formulario un valor entero.
> >
> >El segundo formulario varía dicho entero y




teoricamente
> el valor del entero
> >asignado en el formulario principal por consiguiente
> también debería tener
> >el mismo valor (ya que apuntan al mismo espacio de
> memoria).. Es correcto?
> >
> >A mi no me cambia el valor. Os pongo un ejemplo




rápido:
> >
> >public class Form1
> >{
> > private int A;
> > public Form1()
> > {
> > A = 0;
> > }
> >
> > public void AbreForm2()
> > {
> > new Form2(ref A).ShowDialog();
> > Console.Writeline(A.ToString()); //




Debería
> mostrar 0 ó 10 ????
> > }
> >}
> >
> >public class Form2()
> >{
> > private int B;
> > public Form2(ref int A)
> > {
> > B = A;
> > B = 10;
> > }
> >}
> >
> >
> >Un saludo y gracias
> >
> >
> >.
> >
>
>






.

Respuesta Responder a este mensaje
#7 Octavio Hernandez
14/07/2004 - 18:18 | Informe spam
Calima,

Para poder modificar el A de Form1 desde cualquier parte, puedes:

a) Hacer público el campo A (en general, una mala estrategia)
b) Definir en Form1 un método público CambiarA(int nuevo valor) que podrás
llmar desde fuera...

Slds,

Octavio

"Calima" escribió en el mensaje
news:
y entonces, no hay manera de poder cambiar la variable A desde cualquier
parte del Form2?

Un saludo.



"Octavio Hernandez" escribió en el mensaje
news:
> Calima,
>
> Eso *NO* podrás hacerlo con los recursos "normales" de C#, porque no hay
> punteros en esa "parte" del lenguaje. Habría que mirar el capítulo
> relacionado con el código no seguro (unsafe code).
>
> Slds - Octavio
>
> "Calima" escribió en el mensaje
> news:
> > Exacto, pero si yo quiero cambiar el valor de la variable pasada como
> > referencia desde cualquier método del Form2, como lo puedo hacer??


esto
es
> > lo que he echo y no funciona:
> >
> > public class Form1
> > {
> > private int A;
> > public Form1()
> > {
> > A = 0;
> > }
> >
> > public void AbreForm2()
> > {
> > new Form2(ref A).ShowDialog();
> > Console.Writeline(A.ToString()); // Debería mostrar 0 ó 10
????
> > }
> > }
> >
> > public class Form2()
> > {
> > private int B;
> > public Form2(ref int A)
> > {
> > B = A;
> > }
> >
> > public void UnMetodoCualquiera()
> > {
> > B;
> > }
> > }
> >
> >
> >
> > "Alejandro Perez" escribió en el mensaje
> > news:2b99001c46920$094b0d40$
> > Hola Calima, la cuestion es que esa variable privada B no
> > es la que mantiene la referencia a A del form1, sino el
> > parametro A del constructor del form2.
> >
> > Si?
> >
> > Bye
> > Alejandro Perez
> > MCSD/MCDBA/MCT
> > Caracas - Venezuela
> >
> >
> > >Hola a todos,
> > >Tengo un formulario que le pasa por referencia al
> > constructor de otro
> > >formulario un valor entero.
> > >
> > >El segundo formulario varía dicho entero y teoricamente
> > el valor del entero
> > >asignado en el formulario principal por consiguiente
> > también debería tener
> > >el mismo valor (ya que apuntan al mismo espacio de
> > memoria).. Es correcto?
> > >
> > >A mi no me cambia el valor. Os pongo un ejemplo rápido:
> > >
> > >public class Form1
> > >{
> > > private int A;
> > > public Form1()
> > > {
> > > A = 0;
> > > }
> > >
> > > public void AbreForm2()
> > > {
> > > new Form2(ref A).ShowDialog();
> > > Console.Writeline(A.ToString()); // Debería
> > mostrar 0 ó 10 ????
> > > }
> > >}
> > >
> > >public class Form2()
> > >{
> > > private int B;
> > > public Form2(ref int A)
> > > {
> > > B = A;
> > > B = 10;
> > > }
> > >}
> > >
> > >
> > >Un saludo y gracias
> > >
> > >
> > >.
> > >
> >
> >
>
>


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