Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Paso De Variables Entre Formularios [SOLUCIONADO]
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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:

Public Sub runNew(ByRef Data As String)
  var2 = Data
  Me.ShowModal
End


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 
whisper - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Paso De Variables Entre Formularios 
 
Holas....

Una posibilidd seria declararla publica a dicha variable a la cual debes acceder desde otro lugar... asi...

Public sVar1 As String = "moco"
 



y accedes desde otro lugar(siempre y en cuanto halla una instancia activa de este)

Form1.sVar1 = "mocomoco"
 


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....
Property QueFluidoCorporal As String
Private sQueFluidoCorporal As String = "moco"
 

y los procedimientos
Private Function QueFluidoCorporal_Read() As String

  Return sQueFluidoCorporal

End

Private Sub QueFluidoCorporal_Write(Value As String)

  'valida dato
  
  sQueFluidoCorporal = Value

End
 

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 
osunaosuna - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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).
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
whisper - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Paso De Variables Entre Formularios [SOLUCIONADO] 
 
whisper escribió: [Ver mensaje]

¿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:
Public Sub runNew(ByRef Data As String)

   Data &= "nia"
  
End

 



 
última edición por vuott el Lunes, 06 Abril 2015, 16:33; editado 5 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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".
......

 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Paso De Variables Entre Formularios 
 
shordi escribió: [Ver mensaje]
...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.   undecided
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.

Public SaldoDeTuCuenta as integer


, y que tienes un procedimiento llamado: restarSaldo( cantidad).
Public sub restarSaldo(cantidad as integer)
SaldoDeTuCuenta -=cantidad
end
 

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:

Propiety SaldoDeTuCuenta as integer
private hSaldo as integer

Public function SaldoDeTuCuenta_read() as integer
return hsaldo
end


Public sub SaldoDeTuCuenta_write(valor as integer)

if hSaldo-valor <0 then
message.info("Error:  La operación no se puede realizar")
'avisar que el programa no se ha realizado la operacion...
else
'la operacion se puede realizar.
hSaldo -=valor
endif

end


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...
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Martes, 07 Abril 2015, 12:09; editado 1 vez 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Programa Paso A Paso: Consultas Médicas.... jsbsan Videotutoriales 1 Jueves, 12 Enero 2012, 04:22 Ver último mensaje
ivanovichenco
No hay nuevos mensajes ¿ Cómo Puedo Cambiar El Foco Entre Formu... Shell General 5 Jueves, 04 Septiembre 2014, 00:06 Ver último mensaje
Shell
No hay nuevos mensajes Manual Paso A Paso: Páginas Web Realizada... jsbsan General 5 Jueves, 17 Septiembre 2015, 13:51 Ver último mensaje
tercoIDE
No hay nuevos mensajes Proyecto Web En Gambas Paso A Paso. Del Pa... vicr Aplicaciones/Fragmentos de Código 7 Sabado, 17 Junio 2017, 01:17 Ver último mensaje
mckaygerhard
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron