Foros del Web » Programación para mayores de 30 ;) » .NET »

Pasar variable de form padre a form hijo

Estas en el tema de Pasar variable de form padre a form hijo en el foro de .NET en Foros del Web. Hola, hace unos días puse este post en el foro de Visual Basic para sacarme esta duda, ya que básicamente es lo mismo, aunque no ...
  #1 (permalink)  
Antiguo 29/08/2005, 13:36
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Pasar variable de form padre a form hijo

Hola, hace unos días puse este post en el foro de Visual Basic para sacarme esta duda, ya que básicamente es lo mismo, aunque no me había dado cuenta de algo... la primer solución que me presentaron es definir un modulo, y allí colocar todas las variables que van a necesitar usarse en varios formularios. Al principio me parecía muy buena idea, pero después mencionaron que no lo era tan así. La otra forma era nombre_form.nombre_variable, pero acá está el problema en .NET. Como necesito instanciar el formulario para acceder a la variable, quedan todos los valores de las variables recién inicializadas. Es decir, si yo en el form 1 guardo el id de un producto en una variable publica, y luego trato de acceder a esta desde el form 2, no me devuelve el id del producto, sino que me devuelve 0, como si nunca se hubiera cargado un valor, ya que estoy iniciando una nueva instancia del form 1. Esto no me pasa cuando desde el form 1 accedo a variables del form 2, ya que ahí inicio una nueva instancia del form 2, muestro el formulario, se modifican todas las variables y luego trabajo en el form 1 con estas variables. El problema viene cuando tengo que acceder a una variable del form principal en el form secundario. Alguien sabe como hacerlo, sin tener que definir un modulo?
Muchas gracias como siempre por su ayuda.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 29/08/2005, 23:45
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
tienes que modificar el constructor (o crear uno nuevo de form2), p.ej.

public sub new(byval id as integer)
me.Initializecomponents.
me.new()
variable = id
end sub

public variable as integer

y desde form1

dim nuevo_form2 as form2 = new form2(5)
dim valor as integer = nuevo_form2.variable

es una idea, espero que te sirva de ayuda.

PD: lo del modulo tampoco es tan mala idea.
  #3 (permalink)  
Antiguo 30/08/2005, 07:26
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Intentaré hacerlo, y si... pensandolo un poco mejor quizás no sea tan mala idea la de usar un modulo para esto. Será cuestión de agregar un par de lineas de comentarios y mantener un poco más estructurado el código.
Muchas gracias por tu ayuda jose_minglein2, saludos!.
__________________
Add, never Remove
  #4 (permalink)  
Antiguo 30/08/2005, 07:48
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años, 1 mes
Puntos: 7
mariano_donati la de ocupar un madulo casi siempre es la mejor opcion, aunque habeces no es necesario transpasar los valores desde un obtejo(como un textbox,ect), tu puede hacer referencia al contenido de un objeto en otro formulario

como

textbox1.text = form1.textbox2.text
  #5 (permalink)  
Antiguo 30/08/2005, 09:05
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Claro FNX_NET, así es como lo hago cuando necesito sacar variables de un form secundario para usarlas en un form principal. Pero cuando necesito variables del form principal hacia el form secundario, ahí es donde aparece el problema. Voy a intentar demostrartelo mejor de esta forma (haber si puedo):


Usando variables del form secundario en el form principal:

Código:
'Código que va en el formulario principal
 
Dim frmSecundario As New frmSecundario()
 
frmSecundario.ShowDialog() ' abro el formulario secundario, modifico todas las
 variables públicas
 
Me.textbox1.Text = frmSecundario.variable1
Me.Textbox2.Text = frmSecundario.variable2
Me.Textbox3.Text = frmSecundario.variable3
 
'Esto como se ve no representa ningún problema
...
Usando variables del form principal en el form secundario:

Código:
 
'Código del form secundario
 
Dim frmPrincipal As New frmPrincipal() 
 
'Ahí es en donde está el problema...inicializo una nueva instancia de 
frmPrincipal, todas sus variables vuelven a estar como se inicializan y no con
los valores que resultan de la interacción con el usuario
 
Me.textbox1.Text = frmPrincipal.variable1 'No devuelve nada
Me.textbox2.Text = frmPrincipal.variable2 'No devuelve nada
Me.textbox3.Text = frmPrincipal.variable3 'No devuelve nada
 
...
Se entendió lo que traté de explicar?. Espero que sí. Es esa forma la correcta? o tendré que hacerlo si o si con módulos?

Un saludo!.
__________________
Add, never Remove
  #6 (permalink)  
Antiguo 30/08/2005, 09:43
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
claro ahi no devuelve nada, deberías hacerlo así:

Código PHP:

public sub new(byref frmPadre  as frmPrincipal)
Me.textbox1.Text frmPadre.variable1 
Me
.textbox2.Text frmPadre.variable2 
Me
.textbox3.Text frmPadre.variable3 
end sub 
y en el form principal, en vez del new basico utilizar el nuevo:

Código PHP:
dim Hijo as frmSecundario = new frmSecundario(me)
Hijo.ShowDialog 
Tambien puedes pasarle directamente los valores que necesites, p.ej:

Código PHP:
public  sub new(byval param1 as stringbyval param2 as stringbyval param3 as string)
textbox1.Text =param1
textbox2
.Text =param2
textbox3
.Text =param3
end sub 
Y en el padre
Código PHP:
dim Hijo as frmSecundario = new frmSecundario(textbox1.text,textbox2.text,textbox3.text)
Hijo.ShowDialog() 
Esto es recomendable cuando las variables solo las vas a utilizar en el formulario secundario.Si por ejemplo son variables que vas a utilizar durante en varios lugares (p.ej. el nombre de un usuario, el valor de una constante ...) es más recomendable el módulo.

Espero haberte sido de ayuda.

Un saludo
  #7 (permalink)  
Antiguo 30/08/2005, 10:54
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años, 1 mes
Puntos: 7
eso es muy cierto y tu ejemplo muy bueno ojala que el compadre se pueda guiar con el ejemplo que le enviaste
  #8 (permalink)  
Antiguo 30/08/2005, 12:25
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Excelente... como dice FNX_NET, muy bueno, me han ayudado un montón, muchas gracias en serio por su ayuda.
Nuevamente, muchas gracias por lo que me han ayudado, ahora si puedo barajar entre un par de opciones para saber en que casos conviene usar una y en cuales otra.
Saludos!:
__________________
Add, never Remove
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:27.