Autor |
Mensaje |
whisper
Juan Carlos Dominguez
Aprendiz
Registrado: Abril 2010
Mensajes: 76
Edad: 62 Ubicación:
|
Paso De Variables Entre Formularios [SOLUCIONADO]
Buenas...
Tengo una duda. Necesito llevar y traer unos valores entre formularios pero no queria utilizar variables globales.
Pense pasar una variable local por referencia pero al regresar al formulario principal la variable no tiene el valor asignado.
Explico:
En form1 tengo la variable var1
En form 2 tengo una variable var2
hago una llamada de este tipo:
...
form2.runNew(var1)
print var1
...
y en form2 runNew es algo asi:
Despues de modificar va2 en form2 al imprimir en form1 la variable var1 no tiene los datos asignados.
¿Que estoy haciendo mal? o no se pueden pasar variables de esta forma.
Alguien podría ilustrarme un pogo.
Desde ya Gracias.
última edición por whisper el Lunes, 06 Abril 2015, 13:47; editado 1 vez
|
#1 Lunes, 06 Abril 2015, 02:08 |
|
|
osunaosuna
Martin
Aprendiz
Registrado: Abril 2012
Mensajes: 63
Edad: 47 Ubicación:
|
Re: Paso De Variables Entre Formularios
Holas....
Una posibilidd seria declararla publica a dicha variable a la cual debes acceder desde otro lugar... asi...
y accedes desde otro lugar(siempre y en cuanto halla una instancia activa de este)
No se que diran los puristas, pero no me parece muy acertado esto a mi, pero si funcional, en mi caso cuando necesito algo parecido creo una propiedad al form.
asi....
y los procedimientos
asi podemos evitar muchos problemas cuando la cosa se pone mas gruesa... espero que sirve de algo... exitos
olvide poner que accedes asi
FMain.QueFluidoCorporal = "mocomoco"
=================== No mames wey...
última edición por osunaosuna el Lunes, 06 Abril 2015, 03:19; editado 1 vez
|
#2 Lunes, 06 Abril 2015, 03:17 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Paso De Variables Entre Formularios
Suscribo lo que dice osunaosuna: Puedes hacerla pública... pero no te lo recomiendo. El problema es que con una variable pública, nunca estás 100% seguro de desde dónde se actualiza o qué contiene.
Crea una propiedad y tendrás control absoluto a través de sus eventos Read y Write. En ellos puedes filtrar el valor que se quiere grabar (Write) y depurar o efectuar algún tipo de cálculo o lo que sea sobre el valor que se devuelve (Read).
|
#3 Lunes, 06 Abril 2015, 06:41 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Paso De Variables Entre Formularios
Ampliando un poco el tema:
OsunaOsuna Y Shordi han explicado como enviar datos a un formulario "A" a un formulario "B", el mismo procedimiento se puede hacer para que el formulario "B" mande información "A"
Otra forma de hacerlo es mediante array (y también las clases). Los array (y tambien las clases) tienen una forma muy especial de pasarse, ya que lo que se pasa es la referencia al array y no su valor.
Por ejemplo:
'en el formularioA
Public sub AbreFormularioB()
dim datos as new string[]
datos.add("dato para editar")
formularioB.dat=datos 'el dato lo pasamos por referencia, ya que se trata de un array
formularioB.showmodal()
print "Mostramos el datos que se ha editado, en el formulario B:",datos[0]
end
---------------------------
Por otro lado en el formulario B
Public dat as string[]
'aqui se puede usar dat[0], para editarlo... Como esta pasado por referencia no hace falta enviarlo al formularioA, cuando cerramos este formularioB, ya tendremos el array dat "actualizado".
....
Esto tambien pasa con las colecciones, con lo cual es mucho más facil enviar y recibir datos, y extraerlos con los nombres de las Key. Shell lo comento hace tiempo en uno de sus post.
|
#4 Lunes, 06 Abril 2015, 09:51 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Paso De Variables Entre Formularios
Julio, en tu ejemplo ya estás usando una variable global pública (el array dat as String[] del formulario B), cosa que es lo que se trata de evitar y es poco ortodoxo. Para eso están las propiedades, las cuales también pueden ser arrays, si se quiere. Incluso se podría jugar con estructuras y arrays de estructuras si los datos son complejos.
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#5 Lunes, 06 Abril 2015, 13:06 |
|
|
whisper
Juan Carlos Dominguez
Aprendiz
Registrado: Abril 2010
Mensajes: 76
Edad: 62 Ubicación:
|
Re: Paso De Variables Entre Formularios
Bueno, Gracias por contestar.
Veo que para no utilizar variables pulicas o globales lo mas prolijo sería utilizar propiedades. nunca lo hice pero vi que hay buena informacion (en las respuestas y en el foro), asi que intentare con eso.
Se los agradesco. Un abrazo a todos y voy a dar por cerrado el post.
|
#6 Lunes, 06 Abril 2015, 13:46 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Paso De Variables Entre Formularios [SOLUCIONADO]
¿Que estoy haciendo mal?
Olvidaste de escribir la palabra llave ByRef tambien en la función llamante.
Bueno, en este ejemplo tenemos dos Formularios: FMain y Form1.
En el Form principal ( FMain) escribiremos por ejemplo este codigo:
Public Sub Form_Open()
Dim var1 As String = "Hispa"
Form1.runNew(ByRef var1)
Print var1 ' Vamos a ver el resultado final
Form1.ShowModal ' Preservamos la apertura de Form1 en ShowModal
End
y en el Form secundario ( Form1) escribiremos este codigo:
última edición por vuott el Lunes, 06 Abril 2015, 16:33; editado 5 veces
|
#7 Lunes, 06 Abril 2015, 16:23 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Paso De Variables Entre Formularios [SOLUCIONADO]
jguardon:
Citar: Julio, en tu ejemplo ya estás usando una variable global pública (el array dat as String[] del formulario B)
Pues si, me he liado....
Creo que deberia de quedar asi:
'en el formularioA
Public sub AbreFormularioB()
dim datos as new string[]
datos.add("dato para editar")
formularioB.setdat(datos) 'el dato lo pasamos por referencia, ya que se trata de un array
formularioB.showmodal()
print "Mostramos el datos que se ha editado, en el formulario B:",datos[0]
end
---------------------------
Por otro lado en el formulario B
private hdat as string[]
public setdat(d as string[])
hdat=d
end
'aqui se puede usar hdat[0], para editarlo... Como esta pasado por referencia no hace falta enviarlo al formularioA, cuando cerramos este formularioB, ya tendremos el array dat "actualizado".
......
|
#8 Martes, 07 Abril 2015, 10:43 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Paso De Variables Entre Formularios
...pública... pero no te lo recomiendo. El problema es que con una variable pública, nunca estás 100% seguro de desde dónde se actualiza o qué contiene.
Mah... no llego a comprender esta miedo.
|
#9 Martes, 07 Abril 2015, 11:19 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Paso De Variables Entre Formularios [SOLUCIONADO]
Voutt:
Citar: Mah... no llego a comprender esta miedo.
Un ejemplo del problema que se puede producir:
Imagina que tienes una variable llamada "saldo de tu cuenta", y que esa variable nunca puede ser negativa.
, y que tienes un procedimiento llamado: restarSaldo( cantidad).
Ahora imagina que tienes un SaldoDeTuCuenta=1000, y restaSaldo(1500), automaticamente el SaldoDeTuCuenta=-500, ¡¡¡ se ha puesto negativa!!!
Para corregir esto, se puede hacer lo siguiente:
Más o menos ese el problema que se puede producir si se accede directamente a la variable, no podemos hacer comprobaciones.... sin embargo si accedemos mediante como propiedades (o funciones setting o getting) , si controlamos que podemos hacer si el valor no es el adecuado...
última edición por jsbsan el Martes, 07 Abril 2015, 12:09; editado 1 vez
|
#10 Martes, 07 Abril 2015, 12:09 |
|
|
|