Formulario Para Devolver Variables


Ir a la página 1, 2  Siguiente

Objetivo: Formulario Para Devolver Variables
Hola.
Ya lei en otro hilo que se comentó cómo pasar variables de un formulario a otro. Concretamente, cómo pasar una variable del formulario principal a otro formulario. Mi pregunta es la siguiente. ¿Cómo se hace si lo que quiero es que un formulario devuelva una serie de datos? Por ejemplo, yo tengo un formulario que dos datechooser y un botón. Quiero que al pulsar el botón, el formulario me devuelva las dos fechas seleccionadas, de forma que pueda abrir el formulario en cualquier parte del programa y obtener las dos fechas seleccionadas.
He probado definiendo en el formulario (el que tiene los datechooser) dos variables púlbicas fecha1 y fecha2, pero cuendo cierro el formulario, las variables se destruyen.
Gracias.

Perfil MP  
Objetivo: Re: Formulario Para Devolver Variables
hola : Agrega un modulo, le pones el nombre , que se yo, por ejemplo var. Luego en este modulo var, crea las dos variables publicas que mencionas, supongamos que se llaman fecha1 y fecha2. En el formulario que tiene los dos datechooser y el boton, en el evento click del boton por ejemplo, escribis lo siguiente :

var.fecha1=datechooser1.value
var.fecha2=datechooser2.value
ojo acá, yo puse ".value" pero no me acuerdo cual es la propiedad que "almacena" la fecha en el datechooser, puede ser que sea ".text" (es que en estos momentos no tengo gambas a mano.). Te lo dejo a vos para que investigues.

saludos

Perfil MP  
Objetivo: Re: Formulario Para Devolver Variables
Hola.
Gracias por la respuesta. Yo creía que se podía hacer de otra manera sin tener que definir un módulo aparte para contener las variables.
Saludos

Perfil MP  
Objetivo: Re: Formulario Para Devolver Variables
Hay otra manera, pero sólo te vale para recoger la variable devuelta en el formulario de origen.
En el formulario form1 tienes un campo de texto txt1 donde quieres que aparezca el valor de una variable del form2 al que llamas pulsando en button1.
Lo que tienes que hacer es:
En el form1:
public sub button1_click()
dim fr as new form2(me) 'pasas al formulario 2 una referencia al formulario llamador
fr.showmodal
end

En el formulario2:
private llamador as form
public sub _new(fr as form)
llamador=fr
end

public sub buttonSeleccionar

llamador.txt1.text=mivariable
me.close 'Si quieres cerrarlo después de seleccionado el registro o lo que sea

end


Si no me he explicado bien o tienes alguna duda me lo dices.

Perfil MP  
Objetivo: Re: Formulario Para Devolver Variables
bies88, la forma en que debes hacerlo depende del paradigma de programación que utilices.

Sería muy bueno que aprendas e intentes aplicar rigurosamente uno de los dos paradigmas que soporta gambas, POO o programación imperativa (estructurada y modular). Si el trabajo que haces mediante gambas es algo casual, no te importará mucho esta sugerencia, entonces sólo define los controles como públicos para que puedas tener acceso directo a ellos desde el 2do formulario (en Proyecto > Propiedades, pestaña Opciones).

Si quieres seguir adecuadamente alguno de los paradigmas entonces consulta el libro de gambas, tutoriales del foro y pregunta abriendo otro hilo.

Saludos cordiales.

Objetivo: Re: Formulario Para Devolver Variables
Hola.
Shordi, no me funciona lo que me comentas, pero voy a probarlo de nuevo para asegurarme.
Favianfv, más bien es lo segundo que dices. No me importa mucho el paradigma, aunque sé que no es lo correcto.
Ya declaré los controles de los formularios públicos. Imagina que tenemos un form1 y un form2 donde hay una variables llamada vform2. Entonces, desde el form1, yo puedo hacer

form2.vform2=3
form2.label1.text="HOLA" 'donde label1 es un control del form2


pero no es ésto lo que yo quiero. Yo quiero que la variable v form2 se quede accesible aun cuando ya cierre el form2. Algo como cuando haces

dialog.openfile
print dialog.path 'Aquí está el nombre del fichero que hemos seleccionado con dialog.openfile

De cualquier forma, gracias a todos por la ayuda.

Perfil MP  
Objetivo: Re: Formulario Para Devolver Variables
bies88, ya se te han dado varias opciones para resolver el problema y debes optar por una de ellas para solucionar el problema.

La cuestión que planteas es de muy fácil resolución si manejas un paradigma de programación en concreto. Esto es tan importante que no lo puedes evadir de ningún modo; es decir, aún cuando no te interese aprender un paradigma, estarás aplicando uno: en una herramienta de desarrollo híbrida como gambas, se termina aplicando programación estructurada basada en objetos y escribiendo código spaghetti.

Algunas opciones que tienes para hacer lo que quieres:

* Declaras las variables que quieres conservar durante toda la ejecución del programa en un módulo (programación imperativa/modular/estructurada), como te indicó nrcefe.
* Escribes una clase que maneje las operaciones y datos relacionados con la tarea que quieres realizar (programación orientada a objetos).
* Declaras los símbolos del formulario 1 y 2 como públicos y las variables que te interesen como públicas. Como no puedes mantener una variable declarada en el formulario 2 luego de cerrarlo, antes de hacerlo asignas su valor a una variable (pública) del formulario 1 (esta solución contiene varios vicios de programación). No lo hagas usando mecanismos de POO (como el método _New) para no mezclar más las cosas sino, por ejemplo, usando el evento Close del formulario 2.

Por último, quisiera que observes un problema en el planteamiento de tu pregunta que se viene repitiendo en las preguntas de algunos foristas y es que el problema que quieres solucionar no es pasar una variable de un formulario a otro, sino que ése es el mecanismo que crees que lo resolverá; así, limitas la posibilidad de que podamos ayudarte, porque no conocemos el problema real a solucionar y, en consecuencia, no podemos brindarte verdaderas soluciones alternativas.

Saludos cordiales.

Objetivo: Re: Formulario Para Devolver Variables
Hola.
Ya se que tengo varias opciones y de hecho he usado la primera que me indicaron. El problema concreto es el siguiente. Quiero un formulario con dos datechooser para elegir dos fechas. Quiero llamar a este formulario desde otros formularios distintos (no siempre el mismo) de forma que pueda obtener dos fechas.
Gracias de nuevo.

Perfil MP  
Objetivo: Re: Formulario Para Devolver Variables
Prueba esto:

Fcal es el formulario con el control DateChooser

'FCal form
PRIVATE $fecha AS Date
PRIVATE $target AS String

PUBLIC SUB DateChooser1_Activate()
$fecha = DateChooser1.Value

SELECT CASE $target
CASE "fmain" ' string que identifica el formulario que llama
FMain.setDate($fecha) '<- función en el formulario de destino que fija la fecha
CASE "feadif_i"
FeADIF.setDateIni($fecha)
CASE "feadif_f"
FeADIF.setDateFin($fecha)
CASE "fsearch_i"
FSearch.setDateIni($fecha)
CASE "fsearch_f"
FSearch.setDateFin($fecha)
END SELECT

ME.Close()

END

PUBLIC SUB getDatePicker(ctl AS Control, tgt AS String)
$target = tgt
ME.Border = None
ME.Stacking = Window.Above
ME.Move(ctl.ScreenX, ctl.ScreenY)
ME.Show()

END


En el formulario de destino:

'Form de destino, donde se espera la fecha devuelta por FCal
PUBLIC SUB botonSelector_Click()
FCal.getDatePicker(btnCalIni, "fmain")
END

PUBLIC SUB setDate(d AS Date)
vFecha.Value = d
END


Para usarlo tienes que llamar al calendario desde un botón junto a un ValueBox con su propiedad Type = Date

FCal.getDatePicker(control_boton_que_lanza_calendario, "cadena_que_identifica_el_formulario")

La función setDate(d AS Date) tienes que ponerla en cada form que necesites llamar al calendario.
Al pulsar el botón, el calendario se abrirá junto a éste y al hacer doble click sobre una fecha se pasará al control ValueBox y se cerrará el calendario.

Esto en Gambas3 ya no es necesario, porque existe un control que despliega el datechooser automáticamente, "Dateselect" o algo así...

Espero que te sirva, si tienes dudas, pregunta.

Saludos

Perfil MP  
Objetivo: Re: Formulario Para Devolver Variables
Sin conocer el problema de fondo y considerando el contexto, la solución que propone JGuardon me parece muy acertada.

Sin embargo, me parece que el problema tal como lo enuncia bies88 probablemente no existiría si optara por otras opciones de diseño.

Por ejemplo, tal vez los controles de los formularios en los que bies88 necesita las fechas podrían integrarse en un único formulario mediante un tabstrip. Si así fuera, podría colocar un control datechooser fuera del control tabstrip de modo que fuera accesible al usuario independientemente de la pestaña en la que esté trabajando. De este modo tendría acceso al control datechooser y a sus propiedades sin más.

A esto me refiero cuando digo que al preguntar es mejor brindar un poco más de información sobre el problema que realmente se desea solucionar. Si bies88 nos proporcionara más información sabríamos si lo que enuncié antes es una solución viable y podríamos brindar más alternativas.

Esto también tiene relación con el tiempo que se invierte para brindar una respuesta. Con más información pertinente tal vez una o dos respuestas hubieran sido suficientes.

Saludos cordiales.

Ir a la página 1, 2  Siguiente

Página 1 de 2


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1125s (PHP: -14% SQL: 114%)
Consultas SQL: 23 - Debug off - GZIP Activado